명령 프롬프트에서 스크립트가 시작되면 셸은 해당 스크립트에 대한 하위 프로세스를 생성합니다. 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*$$/'