Ctrl + C 現在のプロセスを強制終了するように常に動作するわけではありません(たとえば、特定のネットワーク操作でそのプロセスがビジー状態の場合)。その場合は、カーソルのそばに "^ C"が表示されるだけで、それ以外のことはできません。
端末を失うことなく、そのプロセスを強制終了させる最も簡単な方法は何ですか?
答えのまとめ:通常は、できます Ctrl + Z プロセスをスリープ状態にしてからkill -9 _process-pid_
を実行します。ここで、 ps とその他のツールを使用してプロセスのpidを見つけます。 Bash (そしておそらく他のシェル)では、kill -9 %1
(あるいは一般的に '%N')を実行することができます。もし Ctrl + Z 動作しません、あなたは別の端末を開いてそこからkillしなければなりません。
その理由を理解する 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 コマンドで送ることができます。だから、あなたのぶら下がっている/ゾンビをやっているプロセスを殺すために、ちょうど プロセスID (PID)を見つけてください。たとえば、pgrep
またはps
を使用してからkill
を使用します。
% kill -9 PID
もし Ctrl+C (SIGINT)は動作しません、試してください Ctrl+\ (SIGQUIT)それから試してみてください Ctrl+Z (SIGTSTP)これでシェルプロンプトに戻る場合は、プロセスIDに対してkill
を実行してください。 (これはデフォルトでSIGTERMシグナルになります。これはkill -TERM
で指定できます。シェルによっては、PIDを参照するために%1
を使用できる場合があります。)それでもうまくいかない場合は、別の端末またはSSHセッションに移動してkill
を実行してください。またはプロセスIDのkill -TERM
。 最後の手段としてkill -KILL
、a.k.a. kill -9
を実行すべきです、なぜならそれはプロセスがきれいに打ち切ったり、開いているファイルを同期したり、一時ファイルを削除したり、ネットワーク接続を閉じたりする機会を与えないからです。
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
できます(ps a
から取得できます)。
通常は、まだプロセスを停止できます(Ctrl + Zその後、kill -9
を使用します。 kill -9
の場合、最初に process PID が必要です。バックグラウンドジョブの場合、kill -9 %1
が最も簡単な方法です。削除したいバックグラウンドジョブの数がわからない場合は、jobs
を実行します。
あるいは、次のようにしてプロセスIDを見つけることができます。
ps
それならあなたは走ることができます
kill -9 <Appropriate PID from ps output>
1)コンソール上でマルチユーザーモードになっている場合は、CTRL-ALT-Fnを押して別の画面にログインし、ps -ef | grep <myprocessname>
またはpidof <myprocessname>
を使用してID番号でプロセスをkill -9できます。
2)リモートで接続している場合は、別の端末セッションを介して同じことをします。
また、 htop をインストールすることで人生を少し楽にすることもできます。ほとんどのディストリビューションはリポジトリにありません。
3)ハングしたsshセッションで(たとえば別のシステムへの)ハングしたばかりの場合は、エスケープキーであるチルダ(〜)を押してからCtrlキーを押しながらZキーを押してホストセッションに戻ります立ち往生しているsshプロセスを強制終了することも、タイムアウトするのを待つこともできます。
Bash(および他のシェルは?)のためのもっと簡単な解決策は、することです:
Ctrl-z followed by kill -9 %1
'%1'は、殺されているジョブ番号を表します。他のジョブが既にスリープしている場合は、 '%2'(または他の何か)になる可能性があります。 Ctrl-zを押すと、どのジョブ番号かがわかります。
[1]+ Stopped <process name>
'kill'はシェルのkillのバージョンであり、/ bin/killではありません。
/ etc/profileにSIGINT(2)で設定されたトラップがあるかもしれません。もしそうなら、それを削除します。ログアウトしてログインしなおすと、問題ないはずです。
Tmuxまたはscreenを使用していて、上記のいずれの方法も機能しない場合でも、<prefix> x
によってペインを強制終了することができます。その後、プロセスも強制終了されます。