pkillはプロセスの直接の子孫であるプロセスを終了しません。

pkillはプロセスの直接の子孫であるプロセスを終了しません。

次の一連のプロセスを終了したいと思います。

PID  PPID
100  XXX
101  100
102  101

PID 100と101を使用すると、期待pkill -P 100どおりに死にますが、PPIDであるため、initに102が与えられます。

pkillがプロセスの直系の子孫の後にリンクされたプロセスを終了し続けるにはどうすればよいですか?

ベストアンサー1

pkillこれはユーザーの指示に従って正確に行われます。上位100回プロセスを終了します。親が100のプロセスの代わりに。

Linuxpkillや FreeBSD にはプロセスツリーをナビゲートするオプションはありません。pstree -l出力を呼び出して解析できます。

AがBを分岐し、BがCを分岐した後にBが死んだ場合、AとCを結ぶことができる親子関係がないことを覚えておいてください。

これらすべてのプロセスを終了する方法があるかもしれませんが、過度に一致する可能性があることに注意してください。

負のプロセスIDを渡すと、killプロセス全体が終了します。プロセスグループ。これはアトミックなので、実行中にプロセスの1つが分岐しても機能しますkill。これは自分自身を自分のグループに入れていないプロセスのみを終了し、同じプロセスグループにある場合は親プロセスや他のプロセスも終了します。ps -o pgid …表示プロセスのプロセスグループIDを実行します。

終了したいすべてのプロセスで特定のファイルが開いている場合は、次のものをfuser -k /some/file使用できます。みんなファイルを開いたプロセスです。

Linuxのもう一つのオプションは独自のPID名前空間でプロセスを実行する。その後、名前空間内で疑似PGID -1を終了して、名前空間全体を終了できます。

おすすめ記事