2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

UnixのコマンドラインでのCtrl+ZとCtrl+Cの違いは?

Mac OS Xのターミナルを使っています。そして、いくつかのプログラムを停止するときにCtrl+ZやCtrl+Cを使っています。しかし、私はそれらが正確に何をしているのかわからないことに気づきました。

この質問は、* 今週のスーパーユーザーの質問 でした。 詳しくは、2011年3月13日の* ブログエントリー を読むか、* あなた自身の質問 **を投稿してください。

回答 (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z は、プログラムに傍受できない信号 SIGSTOP を送ってプロセスを一時停止させるために使用されます。Control+C はシグナル SIGINT を送ってプロセスを kill するのに使われますが、プログラムによって傍受されるので、 終了する前に自己をクリーンアップしたり、全く終了しないようにすることができます。プロセスをサスペンドすると、それを使っていろいろなことができるようになります。例えば、以下のように実行します:

[1]+ Stopped yes

プログラムが中断されている状態で

fg

プログラムが中断されている状態で

bg

プログラムが中断されている状態で

コマンドを実行すると、バックグラウンドで実行することができます (プログラムの出力は TTY に出力されますが)。

中断されたプログラムを殺したい場合、最初に fg でそれを戻す必要はありません、あなたは単にコマンドを行うことができます:

kill %1

複数の中断されたコマンドを持っている場合、

jobs

を実行すると、このようにそれらをリストアップします。

[1]- Stopped pianobar
[2]+ Stopped yes

%# を使用して、# はジョブ番号 (jobs の出力から角括弧で囲まれたもの) で、bgfg、または kill を使用して、そのジョブのアクションを行うことができます。

22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z は SIGTSTP でプロセスを一時停止します。Ctrl+C は SIGINT でプロセスを終了させ、ターゲットが処理したり無視したりしない限りプロセスを終了させるので、再開できません。また、kill()で送ることができ、プロセスが傍受できないSIGSTOPもあります。SIGCONTはSIGSTOPとSIGTSTPの両方に対応するもので、プロセスのサスペンドを解除します。

18
18
18
2011-03-27 11:52:36 +0000

CTRL+Zは(一時停止)ジョブを停止します

CTRL+Cは、プロセスを再開することはできませんが、CTRL+Zを使用して、ジョブはコマンドプロンプトで入力するだけで再開することができます:

fg %1

複数のプロセスが一時停止している場合は、出力を参照してくださいする必要があります

jobs

を行うと、適切な数を選択して再開する e. g.

fg %3

はリストの 3 番目の仕事を再開します。また、バックグラウンドで実行中のジョブを

bg %n

で持つことができます。

3
3
3
2014-07-03 15:57:10 +0000

CTRL+Z はジョブを停止 (一時停止) します

CTRL+C はジョブを終了します

CTRL+C ではプロセスを再開することはできませんが、CTRL+Z ではコマンド・プロンプトで入力するだけでジョブを再開することができます:

fg %1

複数のプロセスが一時停止している場合は、

jobs

を実行して出力を表示する必要があります。

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.

Cntrl + C simply terminates the running process.

**_Cntrl + Cではプロセスを再開することはできませんが、Cntrl + Zではプロセスを再開することができます。

2
2
2
2013-02-26 17:19:22 +0000

前の答えは正しいのですが、何かの理由で Ctrl-Z はすべての子プロセスをサスペンドしますが、 killall -SIGSTOP … は最前面の (親の) プロセスをサスペンドするだけで、子プロセスは好きなように実行させておきます。