次の一連のプロセスを終了したいと思います。
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を終了して、名前空間全体を終了できます。