如何显示终端 shell 的进程树,包括子进程?

the*_*fog 51 shell ps

当从命令提示符启动脚本时,shell 将为该脚本生成一个子进程。我想ps在树形输出中展示终端级进程与其子进程之间的关系。
我怎样才能做到这一点?

到目前为止我尝试过的

文件: script.sh

#!/bin/bash

ps -f -p$1
Run Code Online (Sandbox Code Playgroud)

然后我从命令行调用脚本并传入终端 shell 的进程 ID:

$ ./script.sh $$
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的

  • 顶级(终端)shell 进程
  • ./script.sh
  • ps命令本身的过程
#!/bin/bash

ps -f -p$1
Run Code Online (Sandbox Code Playgroud)

我得到的是:

  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
Run Code Online (Sandbox Code Playgroud)

小智 68

尝试

# 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
Run Code Online (Sandbox Code Playgroud)

  • 该问题暗示寻找从特定进程开始的进程树,将 `$1` 参数传递给脚本或使用 `$$` 查看从当前 shell 开始的树......你能更新你的答案以包含有关信息吗?如何从特定过程开始森林? (8认同)
  • 标志“-a”似乎引用了标志“-e”调用的子集,因此指定两个标志是多余的。 (2认同)

the*_*fog 32

我在阅读了这个超级用户的回答后发现了它,注意到这个评论

但不是针对 PID (-p),因为它只打印特定进程,而是针对会话 (-g)

和实验

ps f -g<PID>
Run Code Online (Sandbox Code Playgroud)

结果

$ ./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
Run Code Online (Sandbox Code Playgroud)

  • 来自手册页:`OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)` (5认同)

slu*_*uge 6

尝试这个:

 $ 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]
Run Code Online (Sandbox Code Playgroud)