GNU/Linux >> Linux の 問題 >  >> Linux

Ctrl+C を使用して、Bash スクリプトで開始されたすべてのバックグラウンド プロセスを強制終了する方法は?

更新:trap SIG を削除する必要があります 一部のシェルはそれを含めることをサポートしていますが、条件付きのプレフィックス。以下のコメントを参照してください。

アンパサンド "&" は、新しいプロセスでバックグラウンドでコマンドを実行します。その親プロセス (あなたのケースでは bash スクリプトを実行するコマンド) が終了すると、このバックグラウンド プロセスはその親プロセスを init にリセットします (PID のプロセス) 1) でも死なない。 ctrl+c を押すと 、フォアグラウンド プロセスに割り込み信号を送信していますが、バックグラウンド プロセスには影響しません。

バックグラウンド プロセスを強制終了するには、kill を使用する必要があります。 PID を使用したコマンド $! で取得できる最新のバックグラウンド プロセスの .

ctrl+c を使用する場合 スクリプトとバックグラウンド プロセスの両方を強制終了するには、次のようにします。

trap 'kill $BGPID; exit' INT
sleep 1024 &    # background command
BGPID=$!
sleep 1024      # foreground command of the script

trap SIGINT のトラップ ハンドラを変更します (trap SIG を削除する必要があります 接頭辞ですが、一部のシェルはそれを含めることをサポートしている場合があります) したがって、スクリプトは $BGPID でプロセスを強制終了します


Linux
  1. LinuxBashシェルスクリプトで暗号化されたパスワードを使用する方法

  2. Bashスクリプトでifelse条件文を使用する方法

  3. ゾンビプロセスとは何ですか?ゾンビプロセスを見つけて殺す方法は?

  1. cronによって開始されたプロセスを監視または強制終了する方法は?

  2. すべての子プロセスを見つける方法は?

  3. Bashで特定のタイムアウト後に子プロセスを強制終了する方法は?

  1. bash:バックグラウンド関数プロセスを黙って強制終了します

  2. 特定の部分名を持つすべてのプロセスを強制終了する方法は?

  3. zshですべてのバックグラウンドプロセスを強制終了するには?