特定のプロセスの子供を知る方法はありますか?たとえば、親IDがfooである子?
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)を出力します。
PIDが123
であるプロセスの直接の子を表示する場合は、ps
コマンドの--ppid
オプションを使用できます。
ps --ppid 123
これをpidof
コマンドと組み合わせて、名前でプロセスの子を取得できます。つまり、foo
というプロセスを指定できます
ps --ppid $(pidof foo)
別のオプションは、System Monitor(プリインストール済み)を使用することです。 SMメニューバーで、[表示]の下の[依存関係]オプションをマークして、視覚的なフィードバックを表示し、下のスクリーンショットに示すような親および子プロセスを表示します。
私は自分でCL(コマンドライン)を好み、Linux(この場合はUbuntu)を日常的に使用している人は、GUIアプリケーションよりも基本的なコマンドの学習に賢明に時間を費やすか、少なくとも両方を習得できることをお勧めしますある程度!
私は専門家ではありませんが、上記の回答を読むと、おそらく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システムを超える移植性があるかどうかはわかりません。