コマンドプロンプトからスクリプトを起動すると、シェルはそのスクリプトのサブプロセスを生成します。ツリースタイルの出力でps
を使用して、ターミナルレベルのプロセスとその子プロセスの関係を示したいと思います。
これどうやってするの?
これまでに試したこと
ファイル:script.sh
#!/bin/bash
ps -f -p$1
次に、ターミナルシェルのプロセスIDを渡してコマンドラインからスクリプトを呼び出します。
$ ./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
試す
# 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
このスーパーユーザーの回答 を読んだ後、私はそれを見つけました、このコメントに注意してください
ただし、特定のプロセスのみを出力するため、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
これを試して:
$ 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]
コマンドps f -g <PID>
を使用して、PID
のルートプロセスをstatできます。
#> ps f -g 0
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? S 0:01 \_ [ksoftirqd/0]
7 ? S 0:19 \_ [rcu_sched]