UnixのコマンドラインでのCtrl+ZとCtrl+Cの違いは?
Mac OS Xのターミナルを使っています。そして、いくつかのプログラムを停止するときにCtrl+ZやCtrl+Cを使っています。しかし、私はそれらが正確に何をしているのかわからないことに気づきました。
この質問は、* 今週のスーパーユーザーの質問 でした。 詳しくは、2011年3月13日の* ブログエントリー を読むか、* あなた自身の質問 **を投稿してください。
Mac OS Xのターミナルを使っています。そして、いくつかのプログラムを停止するときにCtrl+ZやCtrl+Cを使っています。しかし、私はそれらが正確に何をしているのかわからないことに気づきました。
この質問は、* 今週のスーパーユーザーの質問 でした。 詳しくは、2011年3月13日の* ブログエントリー を読むか、* あなた自身の質問 **を投稿してください。
Control+Z は、プログラムに傍受できない信号 SIGSTOP
を送ってプロセスを一時停止させるために使用されます。Control+C はシグナル SIGINT
を送ってプロセスを kill するのに使われますが、プログラムによって傍受されるので、 終了する前に自己をクリーンアップしたり、全く終了しないようにすることができます。プロセスをサスペンドすると、それを使っていろいろなことができるようになります。例えば、以下のように実行します:
[1]+ Stopped yes
プログラムが中断されている状態で
fg
プログラムが中断されている状態で
bg
プログラムが中断されている状態で
コマンドを実行すると、バックグラウンドで実行することができます (プログラムの出力は TTY に出力されますが)。
中断されたプログラムを殺したい場合、最初に fg
でそれを戻す必要はありません、あなたは単にコマンドを行うことができます:
kill %1
複数の中断されたコマンドを持っている場合、
jobs
を実行すると、このようにそれらをリストアップします。
[1]- Stopped pianobar
[2]+ Stopped yes
%#
を使用して、#
はジョブ番号 (jobs
の出力から角括弧で囲まれたもの) で、bg
、fg
、または kill
を使用して、そのジョブのアクションを行うことができます。
Ctrl+Z は SIGTSTP でプロセスを一時停止します。Ctrl+C は SIGINT でプロセスを終了させ、ターゲットが処理したり無視したりしない限りプロセスを終了させるので、再開できません。また、kill()
で送ることができ、プロセスが傍受できないSIGSTOPもあります。SIGCONTはSIGSTOPとSIGTSTPの両方に対応するもので、プロセスのサスペンドを解除します。
Cntrl + Z pause the currently running process.
と
Cntrl + C simply terminates the running process.
**_Cntrl + Cではプロセスを再開することはできませんが、Cntrl + Zではプロセスを再開することができます。