プロセスツリーのナビゲーション

プロセスツリーのナビゲーション

プロセスが階層で構成されていることを知っています。したがって、サブツリーのルートまでの親プロセスを追跡して、特定のプロセスが階層内の特定のサブツリーに属することを確認するタスクを実装したい場合は、高価な提案ですか?

ベストアンサー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しかし、あなたが探しているものがわからないので、どの出力があなたのニーズに最も適しているのかわかりません。

おすすめ記事