web-dev-qa-db-ja.com

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

私はMac OS X Terminalを使っています。そして私は使う Ctrl+Z または Ctrl+C いくつかのプログラムを停止します。しかし、私は彼らが正確に何をしているのかわからないことに気づきました。彼らとは何ですか、そしてそれらの違いは何ですか?

この質問は今週のスーパーユーザー質問でした。
詳しくは、2011年3月13日ブログ記事またはをお読みください。 ) 自分で送信してください今週の質問。

183
Eonil

Control+Z プロセスにシグナルSIGSTOPを送ることによってプロセスを中断するために使用されます。これはプログラムによってインターセプトすることはできません。しながら Control+C シグナルSIGINTでプロセスを強制終了するために使用され、終了する前に自分自身をクリーンアップできるように、またはまったく終了しないようにプログラムによってインターセプトされる可能性があります。

プロセスを中断すると、シェルに表示され、中断されたことがわかります。

[1]+  Stopped                 yes

ただし、1つを殺しても、シェルプロンプトにドロップされる以外に確認は表示されません。プロセスを中断すると、それを使って空想のことをやることができます。例えば、これを実行する:

fg

プログラムが中断されていると、最前面に戻ります。

そしてコマンドを実行する

bg

プログラムを中断すると、バックグラウンドで実行することができます(ただし、プログラムの出力はTTYに送られます)。

中断しているプログラムを強制終了したい場合は、最初にfgを付けて戻す必要はありません。次のコマンドを実行するだけです。

kill %1

中断されたコマンドが複数ある場合は、

jobs

このようにそれらをリストします:

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

%#jobsbg、またはfgとともに使用する#は、ジョブ番号(killの出力からの角​​括弧内の番号)で、そのジョブに対してアクションを実行するために使用できます。

244
Wuffers

Ctrl + ZはSIGTSTPでプロセスを中断します、後で再開することができます。 Ctrl + CはSIGINTでプロセスを強制終了します。これは、ターゲットによって処理または無視されない限りプロセスを終了させるため、再開することはできません。 kill()によって送信することができ、プロセスが傍受することができないSIGSTOPもあります。 SIGCONTはSIGSTOPとSIGTSTPの両方に対応するもので、プロセスを中断しません。

22
Ben Voigt

Ctrl + Zでジョブを停止(一時停止)する

Ctrl + Cでジョブを終了する

ctrl + Cキーを押すとプロセスを再開できませんが、Ctrlキーを押しながらZキーを押すと、コマンドpromtを入力してジョブを再開できます。

fg %1

複数のプロセスを一時停止している場合は、やるべきです

jobs

出力を確認し、再開する適切な番号を選択します。

fg %3

リストの3番目のジョブを再開します。また、バックグラウンドでジョブを実行することもできます。

bg %n

nはジョブ番号です。

17
g24l
Cntrl + Z pause the currently running process. 

そして

Cntrl + C simply terminates the running process.

Ctrl + Cキーを押すとプロセスを再開できません。 Cntrl + Zを使用している場合は、プロセスを再開できます

プロセスを再開するには、fg%1を使用してください。

3
Ravindra Miyani

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

CTRL+C ジョブを終了する

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

fg%1

複数のプロセスを一時停止している場合は、やるべきです

仕事

出力を見るために。

3
abul

前の答えは正しいですが、何らかの理由でCtrl-Zはすべての子プロセスも中断しますが、killall -SIGSTOP ...は最前面(親)プロセスのみを中断し、子を好きなように実行します。

2
Kostas