명령 또는 에서 프로세스가 백그라운드에서 실행 중인지, ps
포그라운드 에서 실행 중인지 어떻게 알 수 있나요 ps -ef
?
ps -ef
를 입력하면 TTY라는 섹션이 있다는 것이 가장 먼저 떠올랐습니다 . TTY 목록을 보면 대부분이 ?
.
내 생각이 맞는지 확인하고 싶어요! 그렇지 않은 경우 프로세스가 백그라운드에서 실행 중인지 포그라운드에서 실행 중인지 확인하는 방법을 알고 싶습니다.
추신: jobs
여기에는 명령이 사용되지 않습니다.
답변1
stat
필드+
추가 포그라운드 프로세스 가 있습니다.:
ps -e -o pid,tty,stat,cmd
포그라운드 프로세스는 프로세스 그룹 ID( pgid
) tpgid
가 터미널( )의 포그라운드 프로세스인 프로세스입니다.
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'
TTY 목록을 보면 대부분 "?"(물음표)인데, 물음표가 백그라운드에서 실행되고 있다는 의미인지 궁금합니다.
아니요, 이는 tty(포그라운드 또는 백그라운드의 데몬 또는 커널 스레드)를 제어하지 않는다는 의미입니다. 다음 목록의 경우배경프로세스:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
답변2
OP가 질문했습니다. "...프로세스가 백그라운드에서 실행 중인지 포그라운드에서 실행 중인지 어떻게 알 수 있나요?"
전경 및 배경 상태프로세스ps
다음 과 같이 보고됨상태의 과정. man ps
이것들을 나열해 보세요프로세스 상태제목 아래에 PROCESS STATE CODE
.
ps -ef
프로세스 상태는 보고되지 않지만 발견된 man ps
섹션을 참조하면 매개변수를 사용하여 하나 이상의 출력을 지정할 수 있습니다 .OUTPUT FORMAT CONTROL
-o
ps
핵심 단어. 이것들핵심 단어STANDARD FORMAT SPECIFIERS
섹션 에 나열된 , 남다른 인내심으로 사람들은 결국 나열된 s
, stat
및 state
키워드를 찾을 것입니다. 하지만 이 세 가지를 참고하세요.핵심 단어제공될 것이다상태출력에는 다음과 같은 내용만 있습니다.stat
핵심 단어내가 줄게 multi-character process state
! 키 포인트:ps
부지런한 사용자에게 적합.
예를 들어 다음 ps
명령은 출력됩니다.PID, 이것상태,게다가주문하다다음 명령을 사용하여 프로세스를 시작하십시오.핵심 단어 pid
, stat
그리고 command
:
ps -eo pid,stat,command
이것이 어떻게 작동하는지 이해하려면 다음 예를 고려하십시오.
터미널에서 다음 명령을 실행합니다.
ping 8.8.8.8 > /dev/null
다른 터미널에서:
ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+ ping 8.8.8.8
이는 우리에게 다음을 알려줍니다.
- PID는
12518
- 프로세스상태예
S+
(키워드를 통해stat
) command
이 프로세스를 생성하는 것은ping 8.8.8.8
이 프로세스가 포그라운드인지 백그라운드인지 확인하려면 한 가지 단계가 더 필요합니다.상태값은 S+
다음과 같아야 합니다.디코딩됨- man ps
제목 아래에 PROCESS STATE CODE
다음 내용이 표시됩니다.
S 중단 가능한 절전(이벤트가 완료될 때까지 대기)
+ 포그라운드의 프로세스 그룹
따라서 +
두 번째 문자 위치에서 프로세스가 실행 중임을 알 수 있습니다.전망. 백그라운드 프로세스는 S
첫 번째 문자 위치에 나열되고 두 번째 위치에는 아무것도 나열되지 않을 수 있습니다. 백그라운드 프로세스를 나타내는 몇 가지 다른 문자 조합이 있습니다.이것목록용.
머리말:이는 내 Debian 기반 시스템(버전으로 보고됨 ps from procps-ng 3.3.15
) 및 macOS 10.15(BSD 버전에서 파생됨 ps
)에서 작동합니다.