特定のプロセスの子供は誰であるかを知る方法はありますか?たとえば、親IDがfooである子?
特定のプロセスの子供は誰であるかを知る方法はありますか?たとえば、親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)を出力します。
もう1つのオプションは、システムモニターを使用することです(プリインストールされています)。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システムを超えて移植できるかどうかはわかりません。
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
POSIXに準拠する必要があります。