サブプロセスのリストをエレガントにインポートします。

サブプロセスのリストをエレガントにインポートします。

から継承するすべてのプロセス(子、孫など)のリストを取得したいと思います$pid。これが私が思いついた最も簡単な方法です。

pstree -p $pid | tr "\n" " " |sed "s/[^0-9]/ /g" |sed "s/\s\s*/ /g"

完全なリストを取得するコマンドや簡単な方法はありますか?みんな子孫プロセス?

ベストアンサー1

次のコマンドは少し簡単で、コマンド名の数字を無視できるという利点があります。

pstree -p $pid | grep -o '([0-9]\+)' | grep -o '[0-9]\+'

またはPerlを使用してください。

pstree -p $pid | perl -ne 'print "$1\n" while /\((\d+)\)/g'

私たちはかっこ内の数字を探しているので、それに会ったときにサブプロセスとして2が与えられませんgif2png(3012)。ただし、コマンド名に角かっこを含む数字が含まれていると、すべて失敗します。テキスト処理は多くの役に立ちます。

だから私もプロセスグループが行く道だと思います。プロセスを独自のプロセスグループで実行するには、Debianパッケージ「daemontools」の「pgrphack」ツールを使用できます。

pgrphack my_command args

またはPerlを再利用することもできます:

perl -e 'setpgid or die; exec { $ARGV[0] } @ARGV;' my_command args

ここで注目すべき唯一のことは、プロセスグループが入れ子にならないことです。したがって、プロセスが独自のプロセスグループを作成すると、その子プロセスは作成されたグループに含まれなくなります。

おすすめ記事