
プロセスが階層で構成されていることを知っています。したがって、サブツリーのルートまでの親プロセスを追跡して、特定のプロセスが階層内の特定のサブツリーに属することを確認するタスクを実装したい場合は、高価な提案ですか?
答え1
2つのPIDがあり、1つがもう1つの子孫であるかどうかを知りたいと思います。その場合は、次のものを使用できます。
#!/bin/bash
# Checks the process tree checking to see if PID $1 is an ancestor of
# PID $2. Returns true/false (0/1).
# (Needs error handling to determine if $1 and $2 are provided and both
# are numeric. Left as an exercise for the reader.)
ps -ea -o pid,ppid |
awk '{ parent[$1] = $2 }
END { if (parent[start] == "")
exit 1
while (lookfor != parent[start] && start != 1)
start = parent[start]
exit start==1 ? 1 : 0
}' lookfor="$1" start="$2"
元の投稿:
最終目標が何であるかによって異なります。たとえば、両方のプロセスが同じターミナルセッションで開始されたことを確認したい場合は、オプションを使用してセッショングループIDを印刷するように指示できます(ログインシェルは常に新しいセッションを開始し、-o
すべてps
の子孫はそのセッションを取得します)。 ID)。
他の目的がある場合、またはケースが非ログインであるプロセスを説明する必要がある場合、解析された出力はps
おそらく最良のアプローチです。例を挙げます。awk
しかし、あなたが探しているものがわからないので、どの出力があなたのニーズに最も適しているのかわかりません。