web-dev-qa-db-ja.com

Ctrl + cおよびCtrl + zを使用して、ジョブを中断/一時停止します

ぶら下がっている仕事を殺すために、私は使用します Ctrl+c、ハングしているジョブに割り込み信号を送信します。時には、これは仕事を止めません、少なくともすぐには。その後、使用できます Ctrl+z ジョブを一時停止してから、kill %1(またはジョブの数に関係なく)で強制終了します。

なぜですか Ctrl+z より強力 Ctrl+c 仕事を邪魔するのですか?時々、 Ctrl+z 動作します。そのような状況で使用できる他のキーの組み合わせはありますか?

stty -aを試しましたが、リストされている他のキーの組み合わせはどれも私には何の役にも立ちません。

5
pfnuesel

Ctrl+C (制御文字intr):SIGINTシグナルをプロセスに送信し、通常、アプリケーションはアボートしますが、アプリケーションはこのシグナルを処理できます。たとえば、C言語のsignal()関数を使用して信号を処理できます。

Ctrl+Z (制御文字susp):SIGTSTP信号をプロセスに送信してバックグラウンドに置き、SIGINTのように処理できます。

プロセスはすぐに殺されません Ctrl+C 待機I/Oがあり、I/Oが完了するまで待機する必要がある場合、アプリケーションはメモリから終了します。 ‌
だが Ctrl+Z プロセスとそのI/Oを一時停止します。技術的には、オペレーティングシステムはCPU時間を提供しません。バックグラウンドプロセスを強制終了すると、I/Oとデータが失われる可能性があります。

プロセスを強制終了するには、SIGKILLまたは信号番号9が最も強力な信号である必要があります。オペレーティングシステムはすぐに強制終了しますが、プログラムがこの信号に反応する方法がないため、データを失う可能性があります。 。

5
Sepahrad Salour