2016-12-09 5 views
0

私のようなコードをデバッグしていますが終了しません:ルビーフォークを終了すると、基本的なプロセス

pid = fork do 
     STDERR.reopen("/dev/null") 
     STDOUT.reopen("/dev/null") 
     exec('some bash command that runs in the foreground') 
    end 

    at_exit do 
     Process.kill("TERM", pid) 
     Process.wait pid 
    end 

問題はフォークを殺すProcess.killではなく、幹部で開始されたプロセスであり、 。

フォークとexecプロセスを強制終了するにはどうすればよいですか?

+0

forkされたプロセスは 'exec'edプロセスと同じです(それらは同じpidを持っています)、それらのうちの1つだけをkillすることはできません。 bashコマンドは他のプロセスを開始しますか? – matt

+0

私の場合、bashコマンドはフォアグランドで 'solr'を起動します – Calin

+0

execコマンドをスリープのように変更してみてください。bashコマンドがいくつかのシグナルを無視している可能性があります。 –

答えて

0

TERMをブロックしているプロセスにTERMシグナルを送信しています。これを「スリープ」のような単純なものに置き換えると、それが終了することがわかります。

関連する問題