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
- 과정상태is
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
)에서 작동합니다.