プロセスの子を見つける


回答:


26

pstreeコマンドを探しています。 pstreeそれ自体で、すべてのプロセスをツリー形式でリストします(同様にlsblk)。-pフラグを使用してPIDを一覧表示し、-s親プロセスも表示できます:

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             `-{probing-thread}(606)

(おそらく)POSIX準拠の子PIDを取得する方法(他のコメントで言及した):

ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'

これpsにより、すべてのプロセスの親PIDとPID(見出しなし)を記述awkし、最初のフィールドに特定のPIDがある行(親PID)を確認し、対応する2番目のフィールド(子PID)を出力します。


10

PIDがプロセスの直接の子を表示するだけの場合は123psコマンドの--ppidオプションを使用できます。

ps --ppid 123

それをpidofコマンドと組み合わせて、プロセスの子を名前で取得することができます。foo

ps --ppid $(pidof foo)

10

もう1つのオプションは、システムモニターを使用することです(プリインストールされています)。SMメニューバーで、[表示]の下の[依存関係]オプションをマークして、視覚的なフィードバックを表示し、下のスクリーンショットに示すような親および子プロセスを表示します。

私は自分でCL(コマンドライン)を好み、Linux、この場合はUbuntuを日常的に使用する人は、GUIアプリケーションよりも基本的なコマンドの学習に賢明に時間を費やすか、少なくとも両方をマスターできることをお勧めしますある程度!

ここに画像の説明を入力してください ここに画像の説明を入力してください


1
OT:それは何のテーマですか?
ムル14

1
Ubuntu + GnomeShell 3.2.1を使用します。テーマはGTK3テーマである「AdwaitaDark」と呼ばれますが、スクリーンショットで見られるようにカスタマイズされており、利用できません。
v2r 14

6

私は専門家ではありませんが、上記の回答を読むと、おそらく人間が読むことができるディスプレイではなくスクリプトでプログラムで使用するなど、procファイルシステムを介してこれを行うより直接的な方法があると思われました。実際、IDコードが$ mypidのプロセスの場合、その子プロセスは

/proc/$mypid/task/$mypid/children

例えば

$ cat /proc/3123/task/3123/children 
3131 3133

同様に、ファイルの「PPid」エントリを介して親プロセスIDを取得できます

/proc/$mypid/task/$mypid/status

例えば

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

ただし、これがLinuxシステムを超えて移植できるかどうかはわかりません。


1
移植性が懸念される場合:ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2POSIXに準拠する必要があります。
ムル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.