一部のプロセスを終了する必要がある自動化スクリプトを作成しています。
以前は主にプロセスを終了しましたが、一度はいくつかのプロセスを終了したkill -9 pid
ときに次のような事実を見つけました。kill -9
tcpdump
たとえば、
tcpdump -i eth0 -w output.pcap
キャッチバッグは入れずにoutput.pcap
空いていた。しかし、使用するとkill
素晴らしい動作します。
たとえば、一部のプロセスでは、killプロセスを./prog >> test_log
使用するとkill -9
出力がリダイレクトされませんtest_log
。
kill
また、killコマンドを使用しないと使用に-9
失敗する可能性があるという心配もあります。
kill
殺すことは、出力ファイルに問題を引き起こすことなく、問題なくプロセスを殺すために正しく使用する方法を教えてくれますか?
ベストアンサー1
プロセスが端末に書き込まずにリダイレクトを使用している場合(または明示的にファイルに書き込む場合でも)、バッファリングが問題になる可能性があります。stdbuf
とunbuffer
()を確認するexpect
か、ここで検索してください。
このフラグを使用すると、問題tcpdump
を解決または減らすことができます-U
。
一般的に言えば、次のように殺す必要があります。
kill $PID; sleep $wait; kill -9 $pid &>/dev/null
kill
/は、メモリとプロセスのリストからプロセスを削除するkill -TERM
のではなく、プロセスをきちんと完了する機会を提供します(たとえば、バッファフラッシュやファイルディスクリプタを閉じるなど)kill -KILL
。これは、当時進行中である可能性のある非原子的作業にとって常に危険です。 。