2016-06-16 3 views
0

を殺していません-cプロセスではなく、子プロセスではありません。子供を殺す方法はありますか? pingは破壊後も継続して実行されます。Process.destroyは()私は次のことを実行しますので、もしProcessBuilderを使用、bashはリダイレクトをサポートしていませんプロセスの子供

この投稿によると、Java - Process.destroy() source code for Linuxは、最終的にネイティブのCコードレベルでkill downを呼び出します。

しかし、私は、Linuxでこれを行う場合でも、それは動作しません:

[[email protected]:~/tmp ]$ bash -c 'ping 127.0.0.1 > console.log' & 
[1] 30914 
[[email protected]:~/tmp ]$ ps 
PID TTY   TIME CMD 
30536 pts/1 00:00:00 bash 
30914 pts/1 00:00:00 bash 
30915 pts/1 00:00:00 ping 
30916 pts/1 00:00:00 ps 
[[email protected]:~/tmp ]$ kill -9 30914 
[[email protected]:~/tmp ]$ ps -ef | grep ping 
john  30915  1 0 15:19 pts/1 00:00:00 ping 127.0.0.1 
john  30919 30536 0 15:19 pts/1 00:00:00 grep ping 
[1]+ Killed     bash -c 'ping 127.0.0.1 > console.log' 
[[email protected]:~/tmp ]$ 

pingがまだ実行されている。..

答えて

1

それはフォークやexecが子プロセスを起動するんbashのように見え、子供は殺されません。あなたの代わりにbashkshを使用する場合は、あなたは、execなしでフォークを取得します:

ksh -c ping 127.0.0.1 > console.log

私にはわからないkshprocess.destroy()キルkshの両方と子プロセスを使用してしかし、確かに、kshbashの両方のマンページの-cオプションは非常によく似ています。

関連する問題