web-dev-qa-db-ja.com

ctrl-cを数回押すと、実行中のプログラムがより早く終了しますか?

巨大なファイルを読み始めてしばらくして終了したいのですが、押すのに時間がかかる
Ctrl+C プログラムが停止します。を押してラグを短くする可能性はありますか Ctrl+C キーを数回?それともキープレスを無駄にしていますか?

41
The Unfun Cat

最初の後 Ctrl-C、プログラムは SIGINT を受け取り、通常、クリーンアップを開始します(tmpファイルの削除、ソケットのクローズなど)。あなたがヒットした場合 Ctrl-C 繰り返しますが、クリーンアップルーチンを中断する可能性があります(つまり、追加のシグナルが発生する可能性があります) 取り残されずに行動する)、混乱を残します。通常、これは当てはまりませんが、より一般的には、追加の信号は実際に送信されますプロセスが終了しました(相互作用の固有の遅延のため)システムのオペレーター)。つまり、シグナルは別のプロセス(しばしばシェルですが、常にではない)によって受信されます。その受信者がこの信号を適切に処理しない場合(Shellが通常行うように-Jenny Dの回答を参照)、そのようなアクションの結果に不愉快に驚くかもしれません。

35
John1024

あなたはそれらを無駄にしています。発生するのは、サーバーが画面出力を完了すると、サーバーは複数の Ctrl-C。最初のものはプロセスを強制終了するために使用され、次のものはシェルで終了します。シェルは次のようになります。

[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ 
11
Jenny D

短い答え:プロセスがそれに反応した場合。

長い答え:ヒットしたとき ctrl+c カーネルはプロセスにシグナルを送信します。次のコマンドで判別できる信号はどれですか。

user@Host:~# stty -a | grep -i "\^C"
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

sttyのmanページをご覧ください:

   intr CHAR
          CHAR will send an interrupt signal

これはシグナルINTであり、番号2としても知られています。プロセスにシグナルハンドラーがある場合、プロセスはこれに反応できます。ほとんどのプロセスは、いくつかのクリーンアップジョブを実行して正常に終了します。

5
chaos

あなたが正しい。キー操作が無駄になっています。押すと Crtl+C 検出された場合、クリアする必要のあるリソースがあるため、時間がかかります。私が知っている1つの可能なケースはどこを押すか Ctrl+C Yum更新プロセスをキャンセルしたい場合、Yumを押すと、 Ctrl+C 2回クリックして、本当にキャンセルしたいことを確認します。

4
Nav

1つだけ Ctrl-C 一般的なケースでは必要ですが、必要になる場合があります。たとえば、Python Ctrl-C 新しいスレッドが生成されているとき、したがって、多くのスレッドを起動している最中に何か問題が発生した場合、python親プロセスに到達しないようにするには、そのスレッドを複数回再送信する必要があります。キャッチ。

2
Patrick Collins

私は常にを押す必要があります Ctrlc 複数回。私は最初のプレスでそれを反応させたことがなく、システムが実際に Ctrlc 送信されています。それは実際にそれらのほとんどを見逃すか失うかのようです。

0
user280568