나는 열린 bash 세션을 가지고 있고 PID를 가지고 있습니다. 비록 터미널을 제어할 수는 없지만(예를 들어 다른 사용자일 수도 있습니다). 이 bash 세션에서 일부 하위 프로세스가 생성되었습니다.
현재 이 bash 세션의 포그라운드에 있는 하위 프로세스(있는 경우)를 알 수 있는 방법이 있습니까?
답변1
운영 체제를 지정하지 않았습니다. 나는 당신이 GNU에 접근할 수 있다고 가정합니다 ps
.
예를 들어 bash 세션 PID가 1857이라고 가정합니다. 그런 다음 해당 세션의 포그라운드와 백그라운드에 있는 프로세스를 확인하려면 다음을 실행합니다.
$ ps -O stat --ppid 1857
PID STAT S TTY TIME COMMAND
1908 S S pts/4 00:00:00 sleep 30m
2071 S+ S pts/4 00:00:00 man ps
STAT 열을 살펴보세요. 이 +
접미사는 포그라운드 프로세스를 식별합니다. 다른 프로세스는 백그라운드 프로세스입니다.
위의 예에서 sleep 30m
셸은 배경(상태는 plain S
)과 man ps
포그라운드(상태는 S+
)에 있습니다.
작동 방식:
--ppid 1857
이는
ps
출력이 상위 PID 1857을 사용하는 프로세스로 제한됨을 나타냅니다.-O stat
이는 출력에
ps
이 필드를 제공하라는 의미입니다. 이 필드의STAT
A는+
프로세스가 전경에 있음을 나타냅니다.
STAT ps
필드 세부정보
man ps
상태 필드가 해석되는 방법에 대한 세부 정보를 제공합니다.
프로세스 상태 코드 다음은 s, stat 및 상태 출력 지정자(제목 "STAT" 또는 "S")가 프로세스 상태를 설명하기 위해 표시하는 다양한 값입니다.
D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped, either by a job control signal or because it is being traced W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct ("zombie") process, terminated but not reaped by its parent For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group
관심 있는 것은 프로세스가 포그라운드인지 여부이며, 마지막 항목이 핵심입니다. +
이는 포그라운드 프로세스를 의미합니다.
답변2
~에서이것은 훌륭한 답변입니다ps
@KamilMaciorowski가 묻는 다소 관련된 Tmux 질문은 귀하의 버전이 이를 지원한다고 tpgid
가정 하고 전경 프로세스 그룹을 가져오는 업데이트된 방법을 제공합니다 procps-ng
.
@ John1024의 답변과 마찬가지로 Bash 프로세스의 pid가 1857이라고 가정합니다.
ps -o tpgid:1= -p 1857
답변3
Ctrl+ 아마도 여러분에게 말할 것입니다... 프로세스를 보고 하위 프로세스가 있는지 확인하는 데 Z사용할 수 있습니다 .ps
물론, 프로그램이 백그라운드에서 실행되도록 의도되지 않은 경우 이 접근 방식은 작동하지 않습니다.
로그인한 w
후 ps
또는 를 사용하여 top
그들이 무엇을 하고 있는지 확인할 수도 있습니다.