web-dev-qa-db-ja.com

Ctrl + cはプロセスを強制終了しません

私は答えを探しましたが、今のところ私の質問に答えるものは何も見つかりません。現在Ubuntuサーバーにログインしていますが、プロセスを実行すると、そのサーバーで割り込みを実行できません。これが私のstty -aです。

user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;

割り込みを変更する.bashrcには何もありません。

これは、rootを含むすべてのユーザーで同じです。また、別の端末を使用して別の場所からログインしようとしましたが、毎回この同じ結果が表示されます。ログインにsshとssh -Xの両方を使用しました。

編集:ローカルではすべての割り込みが正常に機能します。

更新:私はまだ答えを探しています。私の友人もまったく同じ問題を抱えています。問題は、(PC、Mac、Linuxから)ログインしたときに、キーボードがこれらのキーを正しく認識していない場合でも、それらを取得していないことにあるようです。

8
user700786

ctrl+c プログラムを殺すことはありません、

それだけではありません。

POSIX標準が定義する一連の信号があり、これらは実行中のプログラムを制御するために使用されます。

  First the signals described in the original POSIX.1-1990 standard.
  Signal     Value     Action   Comment
  ──────────────────────────────────────────────────────────────────────
  SIGHUP        1       Term    Hangup detected on controlling terminal
                                or death of controlling process
  SIGINT        2       Term    Interrupt from keyboard
  SIGQUIT       3       Core    Quit from keyboard
  SIGILL        4       Core    Illegal Instruction
  SIGABRT       6       Core    Abort signal from abort(3)
  SIGFPE        8       Core    Floating point exception
  SIGKILL       9       Term    Kill signal
  SIGSEGV      11       Core    Invalid memory reference
  SIGPIPE      13       Term    Broken pipe: write to pipe with no
  SIGTERM      15       Term    Termination signal

- http://man7.org/linux/man-pages/man7/signal.7.html

ctrl+c 信号を送信2、「キーボードから割り込み」から、ターミナルから実行したプログラムに。

そのシグナルを処理するのは完全にプログラム次第であり、それはそれについてそれが望む何でもすることができます。多くのスクリプト言語インタープリターは、呼び出されたスクリプトを強制終了して正常に終了することにより、デフォルトの方法でこれを処理します。

特に自動コンテキストからプログラムを終了する場合は、singal 15をお勧めします。killプログラムを使用して、ID(pid)でプロセスにシグナルを送信できます。

kill -15 <pid>

私の知る限り、プログラムはこの信号自体を受信して​​いるので、できるだけ早くASAPを終了する必要があります。

ただし、プログラムがシグナル15を無視する場合、プログラムは存続します(そして、アクセス許可エラーのためにシグナルの送信に失敗していません)

kill -9 <pid>

シグナル9は、私の知る限り、カーネル(タスクマネージャー、およびハードウェアインターフェイス)によって解釈されます。カーネルはプログラムの処理を突然停止し、そのすべてのリソースの割り当てを解除/解放します。

5
ThorSummoner

ここにいくつかの筋金入りのトリックがあります:

Control-Z

プロセスを一時停止し、そのプロセスのジョブIDを返します

次に:

kill -9 %1

(1をジョブIDに置き換えます)。

注:パーセンテージは必須です!そうしないと、initプロセスが強制終了されます。つまり、カーネルが強制終了され、システム全体がクラッシュします(その間にスペースを入れないでください)。

3
kenorb

Ctrl + cはプロセスを強制終了しません。現在実行中のプロセスを途中で停止するだけです。プロセスを強制終了するには、 "KILL"コマンドを使用する必要があります

0

私はこれに遭遇しました 古いフォーラム投稿 この特定の問題について。デフォルトの割り込みシーケンスは、別の設定ファイルのどこかで上書きされる可能性があるようです。

このプロセスを外部でkillするだけの場合は、killを使用できます。極端なkill -9にジャンプするのではなく、この killing processesに関する記事 で説明されているようにkillをエスカレーションする必要があることに注意してください。

ウィキペディアは素晴らしい killプログラムのリソース です。 nixシグナルのリスト とその機能もここにあります。

0
jjclarkson