子を含むターミナルシェルのプロセスツリーを表示するにはどうすればよいですか?


30

コマンドプロンプトからスクリプトを起動すると、シェルはそのスクリプトのサブプロセスを生成します。ターミナルレベルのプロセスとその子との関係をpsツリースタイルの出力で使用して示したいと思います。
これどうやってするの?

今まで試したこと

ファイル: script.sh

#!/bin/bash

ps -f -p$1

次に、ターミナルシェルのプロセスIDを渡して、コマンドラインからスクリプトを呼び出します。

$ ./script.sh $$

私が欲しいのはこのようなものです

  • トップレベル(端末)シェルプロセス
  • ./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

2
なぜ使用しないのpstreeですか?
ムル

@muru私が試みたがpstree、意味のある出力を生成することができなかった。ちょうど私が探していたものを正確にpstree $$生成bash--pstreeできなかったと思う。
the_velour_fog

あなたが探しているものではないのですか?スクリプトを置き換えたpsので、他に何を期待していますpstreeか?
ムル

@muruあなたの権利は、技術的には私が望んでいたものですが、最小限のものです。つまり、psのようにPIDを表示せずに、どのプロセスを表示しているのかをどのようにして確認できますか?
the_velour_fog

4
pstree -p $$?それとも、あなたはコマンドラインのショーの多くをしたい場合は、pstree -pa $$。それとも、あなたが上がってすべての親プロセスを表示したい場合は、pstree -psa $$
ムル

回答:


30

試して

# 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

5
質問は、特定のプロセスで始まるプロセスツリーを探す$1こと、スクリプトへの引数を取ること、または$$現在のシェルで始まるツリーを見るために使用することを意味しました。特定のプロセス?
フィルブランデン

23

このコメントに注目して、このスーパーユーザーの回答を読んだ後に見つけました

ただし、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

3
manページから:OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
phyatt

1

次のコマンドps f -g <PID>を使用して、ルートプロセスを統計できますPID

#> 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]

1

これを試して:

 $ 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]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.