子プロセスと親プロセスを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で子プロセスを実行しないために機能します。シェル内で複数のタスクを実行すると、期待される結果は表示されません。

$ 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

$$以下は現在のシェルのPIDです。echo $$PIDを出力するには入力してください。

おすすめ記事