UNIX / Mac OS X端末の^ Cと^ Dの違いは何ですか?


61

私は何かを停止しようとすると、私が使用し^C、時には^Dターミナルで。

2つの違いは何ですか?なぜ一部のプログラムは、に応答しない^C、しかし^D。使用するときにTerminal.appが終了するのはなぜ^Dですか?


参考:Wikipediaのページを参照してください:Control + Cで作成されたEND OF TEXTキャラクターU + 0003、および Control + Dで作成されたEND OF TRANSMISSIONキャラクターU + 0004
バジルブルク

回答:


60

CtrlCは、SIGINT現在のフォアグラウンドプロセスにを送信するよう端末に指示します。これは、デフォルトではアプリケーションの終了に変換されます。CtrlDは、標準入力でEOFを登録する必要があることを端末に通知します。これは、bashが終了したいと解釈します。


62

Ctrl+ D^D)はファイルの終わりを意味します。行の先頭でのみ機能し(少し簡略化しています)、プログラムが端末から入力を読み取っていない場合は効果がありません。あなたの実験で^Dは、これ以上コマンドを入力するつもりはないので終了したことをシェルに伝えました。その後、サブプログラムが終了したため、端末は終了しました。

Ctrl+ C^C)は「中断」、つまり、実行中の操作を停止することを意味します。技術的に、を押す^CINTシグナルが送信されます。これはデフォルトでアプリケーションを終了しますが、多くのプログラムではトップレベルに戻ることを意味します(たとえば、シェルでコマンドラインの入力を止めて元のプロンプトに戻る)。

プログラムがに応答しない場合は、+ ()を^C試してください。これはQUITシグナルを送信します。これはデフォルトでアプリケーションを終了し、それほど多くのプログラムがインターセプトしません。Ctrl\^\

シグナルを送信する別のキーはCtrl+ Z^Z)です。フォアグラウンドで実行中のプログラムを一時停止するTSTP信号を送信します。(TSTPは、「端末停止」の略であり、それが似ていSTOP。STOPはできません一方、無視することができますが、TSTP)シェルから、あなたはそのプログラムのと実行を再開することができますfgコマンド(フォアグラウンドで再開)またはbgコマンドで(履歴書をバックグラウンド)。

これらのキーはすべて、sttyコマンドで変更できます。一部のプログラム、特にキーバインドがあるフルスクリーンプログラムは、それらを無効にします。


小さな修正:Control-ZはTSTP(ターミナルストップ)信号を送信します。これはプロセスによってキャッチまたは無視できますが、STOPシグナルはキャッチできません。
クリスページ

これが必要です!立ち往生していて、出られなかった
ahnbizcad

1
CTRL-Dに関する単なる提案:「これまでに入力した入力をフラッシュする」ことを意味し、行が空の場合、read()はゼロで戻り、「ファイルの終わり」と解釈されます。
ルカ

これは非常に重要で役立つ情報です。包括的かつ明確な説明をありがとう
-iono

好奇心が強いのですが、なぜシェルで実行されるpythonプログラムはctrl + cで終了せず、代わりにプロンプ​​トが表示されKeyboardInterruptますか?ctrl + d(行の先頭にある場合)およびctrl + \で終了します。
リック

2

上記の2つの本当に良い答えに加えて、ここに例があります:

pythonシェルを入力すると、Pythonの>>>プロンプトが表示されます。

さて、を押すとCtrl+C、それがKeyboardInterrupt>>>にとどまります。
たとえば、入力してforループに入るとfor x in (text):、...プロンプトを表示してさらに入力するのを待ちます。Ctrl+C今すぐヒットすると、forステートメントを終了して>>>プロンプトに戻り
ます。Ctrl+D>>>または...のいずれの時点でも、Pythonプロンプトを終了して元のシェルに戻ります。

同様に、別のマシンにsshされた場合、a Ctrl+Cは既存のコマンドを終了し、それCtrl+Dを実行してマシンからも終了します。(また、Deleteキーはを実行するのと同じですCtrl+D


この答えに感謝します。しかし、自分で試してみると、いくつかの不正確さが見つかりました。リモートマシンにsshしてpythonプロセスを実行中に、Ctrl + Dでpythonを終了し、リモートマシンのプロンプトに戻りましたが、マシンから終了しませんでした。また、Deleteキーは、どの場合でもCtrl + Dと同じように機能せず、Pythonを実行したり、リモートプロンプトまたはローカルプロンプトで実行したりしました。もちろん、Pythonでの入力中に実際に文字を削除する以外は、何もしなかったようです。ただし、Ctrl + Dは入力時にDeleteキーとして機能し、文字を削除しました。
スタックアンダーフロー

1
それは面白いです。使用しているシェルの種類(bash、kshなど)に依存する可能性があると思います。
シッダールタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.