
すべての子プロセスをツリー形式で取得するには、次のコマンドを実行できます。
$ 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 | less
PID 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を出力するには入力してください。