터미널 쉘의 프로세스 트리(하위 프로세스 포함)를 표시하는 방법은 무엇입니까?

터미널 쉘의 프로세스 트리(하위 프로세스 포함)를 표시하는 방법은 무엇입니까?

명령 프롬프트에서 스크립트가 시작되면 셸은 해당 스크립트에 대한 하위 프로세스를 생성합니다. ps터미널 수준 프로세스와 해당 하위 프로세스 간의 관계를 표시하기 위해 트리 출력을 사용하고 싶습니다 .
어떻게 해야 하나요?

내가 지금까지 시도한 것

문서:script.sh

#!/bin/bash

ps -f -p$1

그런 다음 명령줄에서 스크립트를 호출하여 터미널 셸의 프로세스 ID를 전달했습니다.

$ ./script.sh $$

내가 원하는 것은 이것이다

  • 최상위(터미널) 셸 프로세스
  • ./script.sh
  • ps명령 자체의 프로세스
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

내가 얻는 것은 다음과 같습니다.

  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash

답변1

시도 --forest(또는 -H) 플래그

# ps -ef --forest
root     114032   1170  0 Apr05 ?        00:00:00  \_ sshd: root@pts/4
root     114039 114032  0 Apr05 pts/4    00:00:00  |   \_ -bash
root      56225 114039  0 13:47 pts/4    00:00:16  |       \_ top
root     114034   1170  0 Apr05 ?        00:00:00  \_ sshd: root@notty
root     114036 114034  0 Apr05 ?        00:00:00  |   \_ /usr/libexec/openssh/sftp-server
root     103102   1170  0 Apr06 ?        00:00:03  \_ sshd: root@pts/0
root     103155 103102  0 Apr06 pts/0    00:00:00  |   \_ -bash
root     106798 103155  0 Apr06 pts/0    00:00:00  |       \_ su - postgres
postgres 106799 106798  0 Apr06 pts/0    00:00:00  |           \_ -bash
postgres  60959 106799  0 14:39 pts/0    00:00:00  |               \_ ps -aef --forest
postgres  60960 106799  0 14:39 pts/0    00:00:00  |               \_ more

답변2

읽고 나서 알게 된 사실이 슈퍼유저 답변, 이 댓글을 확인했습니다

그러나 PID(-p)에서는 작동하지 않습니다. 특정 프로세스만 인쇄하고 세션(-g)에서는 인쇄하지 않기 때문입니다.

실험을 진행하고

ps f -g<PID>

결과

$ ./script.sh $$
  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
 9906 pts/24   S+     0:00  \_ bash ./script.sh 14492
 9907 pts/24   R+     0:00      \_ ps f -g14492

답변3

이 시도:

 $ ps -afx
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    4 ?        I<     0:00  \_ [kworker/0:0H]
    6 ?        I<     0:00  \_ [mm_percpu_wq]
    7 ?        S      0:14  \_ [ksoftirqd/0]
    8 ?        I      0:34  \_ [rcu_sched]
    9 ?        I      0:00  \_ [rcu_bh]
   10 ?        S      0:00  \_ [migration/0]
   11 ?        S      0:00  \_ [watchdog/0]

답변4

프로세스에만 관심이 있다면 이것은 나에게 가장 적합합니다. 재미있게 보내세요.

ps fx | perl -ne "print if /^s*$$/.."'/^\s*$$/'

관련 정보