Bash에서 어떤 프로세스가 포그라운드에 있는지 알아보세요.

Bash에서 어떤 프로세스가 포그라운드에 있는지 알아보세요.

나는 열린 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이 필드를 제공하라는 의미입니다. 이 필드의 STATA는 +프로세스가 전경에 있음을 나타냅니다.

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

물론, 프로그램이 백그라운드에서 실행되도록 의도되지 않은 경우 이 접근 방식은 작동하지 않습니다.

로그인한 wps또는 를 사용하여 top그들이 무엇을 하고 있는지 확인할 수도 있습니다.

관련 정보