フォアグラウンドジョブでのctrl cとctrl z


26

Ctrl+ Z一方、仕事を停止Ctrl+がC仕事を殺します。

何故ですか?他の方法はもっと意味がありませんか?

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &

4
「逆の方が理にかなっていないだろうか?」なぜそうなると思うかを明記していただけますか?
glglgl 14年

回答:


55

ジョブ制御表記について混乱していると思います。特に「停止」とは、ジョブはまだ動作しているが、何かを処理する能力が保持されていることを意味します(CPUで何かを処理する時間は与えられません)。これは事実上「一時停止」または「一時停止」状態ですが、これは正しい技術用語ではありません。

  • CtrlCジョブを「停止」せず、キャンセルまたは強制終了します。技術的には、実行中の処理を中止してすぐに終了するように指示する割り込み信号をプログラムに送信します。一部のプログラムはこのシグナルを聞き、終了する前にいくつかの緊急時のクリーンアップ作業を行います。他の人は信号に応答せず、その後単に中止されます。

  • CtrlZ、一方で、ジョブを「停止」します。繰り返しますが、これは信号で行われますが、今回は「割り込み」信号ではなく「停止」です。これは事実上それを保留にし、シェルに制御を返しますが、実際にはジョブを強制終了しません。そのようなジョブを実行し続けたい場合はbg、最後に停止したジョブをバックグラウンドに送信するコマンドを発行できます。その後&、最初から実行したかのように、バックグラウンドジョブとして実行を継続します。またfg、最後に停止したジョブをフォアグラウンドで再開するために使用することもできます(中断したところから続行できるようにし、再びやり取りできるようにします)。


Ctrl + ZはSIGKILLを送信し、Ctrl + CはSIGINITを送信するとまだ考えています。したがって、Ctrl + Zはジョブを強制終了します。しかし、私の例ではCtrl + Zだけで、あなたが言ったようにジョブを停止します。だから、少し混乱します。
neo0 14年

10
@ neo0-奇妙なカスタム設定に慣れているかもしれませんか?そのようなものを構成できます-ただし、これらのマップに依存するアプリケーションがある場合は、おそらくそうすべきではありません。しかし、デフォルトの設定があるCTRL+C=SIGINTCTRL+Z=SIGTSTP
mikeserv 14年

3
カレブは正しい(+1)。ctrl-Zはプログラムを停止します。これは「フリーズ」と見なす必要がありますが、そのプログラムはまだメモリ内にあり、開いているファイルなどです。強制終了または終了されません。
オリビエデュラック14年

「停止」は「停止」よりも明確な場合があります。
ラッセルボロゴーブ14年

1
@jiggunjerそれは物の形についてです。この回答 2つのステップが必要な理由についての背景を提供し、この1つは、これらのステップをより簡単にするための機能を紹介します。
カレブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.