将子进程和父进程递归地列为 PID 的树

将子进程和父进程递归地列为 PID 的树

要以树格式获取所有子进程,您可以运行以下命令

$ ps -g 24154 --forest
  PID TTY          TIME CMD
  24154 pts/4    00:00:00 bash
  25745 pts/4    00:00:00  \_ ps

我如何获得 PID 的以下 o/p?以下是ps -ef --forest | lessPID 24154 的部分操作。

root      1173     1  0 Sep07 ?        00:00:00 /usr/sbin/sshd -D
root     24141  1173  0 11:10 ?        00:00:00  \_ sshd: vishwa [priv]
vishwa   24149 24141  0 11:10 ?        00:00:00  |   \_ sshd: vishwa@pts/4
vishwa   24154 24149  0 11:10 pts/4    00:00:00  |       \_ -bash
vishwa   26004 24154  0 11:22 pts/4    00:00:00  |           \_ ps -ef --forest
vishwa   26005 24154  0 11:22 pts/4    00:00:00  |           \_ less

答案1

您可以通过运行以下命令获取从 init 进程开始的进程名称和 PID

$  pstree -ps $$
systemd(1)───sshd(1173)───sshd(42546)───sshd(42555)───bash(42560)───pstree(46455)

下面的命令有效,因为我没有在 bash 中运行任何子进程。如果 shell 内运行多个作业,您将看不到预期的结果

$ ps -ef --forest | grep -B3 $$
root      1173     1  0 Sep07 ?        00:00:00 /usr/sbin/sshd -D
root     42546  1173  0 20:44 ?        00:00:00  \_ sshd: vishwa [priv]
vishwa   42555 42546  0 20:44 ?        00:00:00  |   \_ sshd: vishwa@pts/3
vishwa   42560 42555  0 20:44 pts/3    00:00:00  |       \_ -bash
vishwa   46522 42560  0 21:13 pts/3    00:00:00  |           \_ ps -ef --forest
vishwa   46523 42560  0 21:13 pts/3    00:00:00  |           \_ grep --color=auto -B3 42560

$$这里是当前shell的PID,键入echo $$以输出PID。

相关内容