Ctrl + C は、現在のプロセスを終了させるためには必ずしも機能しません (例えば、そのプロセスが特定のネットワーク操作でビジー状態になっている場合)。その場合、カーソルのそばに “^C” が表示されるだけで、それ以外のことはできません
端末を落とさずに今すぐそのプロセスを強制的に死なせる一番簡単な方法は?
回答のまとめです。通常、Ctrl + Z でプロセスをスリープ状態にしてから kill -9 _process-pid_
を行い、ps や他のツールでプロセスの pid を見つけることができます。Bash (および他のシェルの場合もあります) では、kill -9 %1
(または一般的には ‘%N’) の方が簡単です。Ctrl + Z がうまくいかない場合は、別のターミナルを開いてそこからキルする必要があります
192 Dustin Boswell 2011-02-09
なぜCtrl + Cが効かないのかという問題を理解するためには、押すとどうなるのかを理解することが非常に役立ちます
ほとんどのシェルは Ctrl + C を「SIGINT シグナルを現在フォアグラウンドで動作しているプログラムに送る」ようにバインドしています。シグナルの違いについては、man signalを参照してください
SIGINT 2 Term Interrupt from keyboard
プログラムは、SIGTSTPも同様に無視することができるので、そのシグナルを無視することができます
SIGTSTP 18,20,24 Stop Stop typed at tty
(これは、Ctrl + Zを押すと、ほとんどのシェルがそうなるので、動作保証はありません)
プロセスで無視できない信号があります。SIGKILL, SIGSTOP などです。これらのシグナルは、killコマンドで送ることができます。つまり、ハンギング/ゾンビ化しているプロセスを kill するには、プロセス ID (PID) を見つけてください。例えば、pgrep
やps
を使って、kill
とします
% kill -9 PID
132 akira 2011-02-09
もし Ctrl+C (SIGINT) がうまくいかなければ、Ctrl+\ (SIGQUIT) を試してみてください。それから Ctrl+Z (SIGTSTP) を試してみてください。シェルプロンプトが表示されたら、プロセスIDをkill
で指定してください。(これはデフォルトで SIGTERM シグナルになりますが、kill -TERM
で指定できます。シェルによっては、%1
を使って PID を参照することができるかもしれません)。それでもうまくいかない場合は、別のターミナルや SSH セッションに行って、プロセス ID に対して kill
か kill -TERM
を実行してください。最後の手段として kill -KILL
、別名 kill -9
を実行すべきです。これはプロセスがきれいに終了したり、開いているファイルを同期したり、一時ファイルを削除したり、ネットワーク接続を閉じたりする機会を与えないからです
123 Teddy 2011-02-09
こちらのリンクもご覧ください
Ctrl+Z: 処理を一時停止します
Ctrl+C:丁重に今すぐプロセスを停止するようにお願いします
Ctrl+\: 現在フォアグラウンドにいるプロセスを容赦なく殺す
40 RoboAlex 2012-06-19
Ctrl-Zキーを押して、プログラムを一時停止してバックグラウンドに置く
Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!
(fg
で再び前景に戻す)
そして、プロセスIDを指定してkill
またはkill -9
を実行することができます(プロセスIDはps a
から取得します)
33 Daniel Beck 2011-02-09
通常は、まだプロセスを停止しても(Ctrl + Z)、kill -9
を使用することができます。kill -9
では、まずプロセスのPIDが必要です。バックグラウンドジョブの場合は、kill -9 %1
が最も簡単な方法です – 殺害したいバックグラウンドジョブの数がわからない場合は、jobs
を実行してください
あるいは、プロセスIDを使って検索することもできます
ps
それから、あなたは実行することができます
kill -9 <Appropriate PID from ps output>
13 Olli 2011-02-09
もっと簡単なのは、Bash (と他のシェル?) の解決策です
Ctrl-z followed by kill -9 %1
ここで、’%1′ は殺されるジョブ番号を表します。すでに他のジョブが眠っている場合は、’%2′ (または他の何か) になるかもしれません。どのジョブ番号かは、Ctrl-zを押すとわかります
[1]+ Stopped <process name>
kill’ はシェル版の kill であり、/bin/kill ではないことに注意してください
5 community wiki 2011-02-09
1) コンソール上でマルチユーザモードの場合、CTRL-ALT-Fnを押して別画面でログインし、ps -ef | grep <myprocessname>
またはpidof <myprocessname>
を使用して、ID番号で-9のプロセスをkillすることができます
2) リモートで接続している場合は、別の端末セッションで同様の操作を行ってください
また、htop をインストールすることで生活を少し楽にすることができます。ほとんどのディストロは htop をレポに持っています
3) ssh セッションがハングアップしている場合 (例えば別のシステムへ)、チルダ (~) を押してみてください。エスケープキーである CTRL-Z を押してホストセッションに戻ります
4 Linker3000 2011-02-09
tmuxやscreenを使っていて、上記のどれもうまくいかない場合は、<prefix> x
でペインをキルしても、プロセスもキルされてしまいます
0 ospider 2017-04-18
etc/profile に SIGINT(2) が設定されている可能性があります。もしそうならば、それを削除してください。ログアウトして再度ログインすれば問題ありません
0 TechNo_phile 2017-10-26