2016-09-07 3 views
2

あるxtermがプロセスを実行する別のxtermを実行する状況があります。 私は何らかの種類のウォッチドッグを設定し、スタックされたプロセスの場合にはこれらのウィンドウをすべて終了したいと考えています。どのようにプロセスをすべてのchildernで終了させることができますか

私はこれを行うためにRubyを使用しています。最初のxtermがオープンされると、それはPIDになり、後でSIGTERMが送られると、最初のxtermウィンドウだけが消滅しますが、2番目のxtermウィンドウは消滅します。

それは簡単にIRBで再現することができます。

irb(main):002:0> cmd = "xterm -e xterm -e sleep 1000" 
=> "xterm -e xterm -e sleep 1000" 
irb(main):003:0> pid = Process.spawn(cmd) 
=> 669 
irb(main):004:0> Process.kill(15, 669) 
=> 1 

これは開いた第2のxtermウィンドウを残します。どのようにすべてのプロセスチェーンを殺すことができますか? ps xfpstreeのいずれかを使用して

おかげ

答えて

0

は、あなたが動的プロセスの階層を実行している見ることができます。

私はstraceを使って、これらのプログラムの動作を追跡しました。彼らは/proc/$pid/stat/proc/$pid/statusの内容をチェックしているので、プロセスの親が誰であるかの情報が得られました。

おそらく、親PIDが取得したPID(またはそのプロセスのPPID)と等しいプロセスを探す必要があります。

関連する問題