자식을 포함하여 터미널 쉘의 프로세스 트리를 표시하려면 어떻게해야합니까?


30

명령 프롬프트에서 스크립트가 시작되면 셸은 해당 스크립트의 하위 프로세스를 생성합니다. 터미널 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

2
왜 사용하지 pstree않습니까?
muru

@muru 나는 ​​노력했지만 pstree의미있는 결과물을 얻을 수 없었 습니다. 나는 내가 원하는 것을 정확하게 pstree $$생산 bash--pstree하지 못했다고 생각 합니다.
the_velour_fog

당신이 찾고있는 것이 아닌가? 스크립트를 교체 ps했으므로 제외하고 무엇을 기대 pstree하십니까?
muru

@muru는 기술적으로 내가 원했던 것이지만 너무 작습니다. 즉 ps와 같은 PID없이보고있는 프로세스가 테이블 출력을 어떻게 알 수 있는지 어떻게 알 수 있습니까?
the_velour_fog

4
pstree -p $$? 또는 더 많은 명령 줄 표시를 원하면 pstree -pa $$. 또는 모든 상위 프로세스가 표시되도록하려면 pstree -psa $$.
muru

답변:


30

시험

# ps -aef --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

5
이 질문은 특정 프로세스에서 시작 $1하여 스크립트에 대한 인수를 취 하거나 $$현재 쉘에서 시작하는 트리를 보는 데 사용 하는 프로세스 트리를 찾는 것을 암시했습니다 ... 포리스트를 시작하는 방법에 대한 정보를 포함하도록 답변을 업데이트 할 수 있습니까? 특정 과정?
filbranden

23

이 주석을 주목 하면서이 수퍼 유저 답변 을 읽은 후에 그것을 찾았습니다 .

그러나 특정 프로세스 만 인쇄하기 때문에 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
맨 페이지에서 :OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
phyatt

1

명령을 사용하고 다음에 ps f -g <PID>대한 루트 프로세스를 스탯 화할 수 있습니다 PID.

#> ps f -g 0

PID TTY      STAT   TIME COMMAND
2 ?        S      0:00 [kthreadd]
3 ?        S      0:01  \_ [ksoftirqd/0]
7 ?        S      0:19  \_ [rcu_sched]

1

이 시도:

 $ 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]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.