強制終了プロセスが失敗する


1

バックグラウンドジョブとしてbashスクリプトを実行しています。bashスクリプトは、時間がかかる実行可能ファイルを呼び出します。私が間違っていない場合、bashスクリプトの実行は親プロセスであり、実行可能ファイルの実行は子プロセスです。

私は今、バックグラウンドジョブである親プロセスを殺すことによって実行全体を停止したい

kill -9 $(jobs -p)

ターミナルは、bashスクリプトの実行が強制終了されたことを示しています。ただし、実行可能ファイルの実行は依然としてtopの出力でハングします。子プロセスを殺す方法も疑問に思っていますか?

回答:


1

負のPIDを使用すると、プロセスグループが強制終了されます。--PIDの前にハイフン(マイナス)がそれを混同しないように、残りの引数は、オプションスイッチではないことを殺す伝えます。

kill -- -12345

また、-9最後の手段です。少なくとも-15(SIGTERM、デフォルト)を最初に試すまで使用しないでください。これにより、プログラムは終了する前にハウスキーピングを行うことができます。参照してください。私が殺す-9使用する必要があるときキルの無駄な使用を-9または-9殺します


0

killall より良い結果が得られる可能性があります。

警告:killallは、* nixが異なると動作が異なります。Linuxでは、引数に一致するタイトルを持つプロセスを強制終了します。Solarisでは、指定したプロセスだけでなく、すべてのプロセスを強制終了します。したがって、Solarisでは、killallをrootとして実行すると、マシンが事実上シャットダウンします。コマンドがどの動作に従うかを確認してください


4
警告します、killallは異なる* nixで異なる動作をします。Linuxでは、引数に一致するタイトルを持つプロセスを強制終了します。Solarisでは、指定したプロセスだけでなく、すべてのプロセスを強制終了します。したがって、Solarisでは、killallをrootとして実行すると、マシンが事実上シャットダウンします。コマンドがどの動作に従うかを確認してください。
バブ

このコメント、@ Babuをありがとう、これは間違いなく私が見落としていたものです。
デニスゾーテマン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.