Ubuntuサーバーでスタックしたコマンドを中止するにはどうすればよいですか?


11

ctrl+ cがあることは知っていますが、時々うまくいきません。Ubuntuデスクトップでは、これが発生したときにターミナルウィンドウを閉じて新しいウィンドウを開くことができますが、UbuntuサーバーのCLIを使用して(ボックスを再起動せずに)これを解決するにはどうすればよいですか?


回答:


21

CTRL+CSIGINTアプリケーションに送信します。アプリケーションは、このシグナルのハンドラーを構成することも、シグナルを無視することもできます。デフォルトでは、ハンドラはなくSIGINT、アプリケーションを強制終了します。

CTRL+\whichを使用して送信できますSIGQUIT。また、コア制限がゼロでない場合、これはコアダンプを生成します。

プロセスを中断して、シェルに戻ることができます。CTRL+Zこれにより、プロセスの実行が停止され、シェルプロンプトに戻ります。プロセスはメモリ内にあり、現在のシェルでジョブとして使用できます。その後、kill -SIGNAL %%またはkill -SIGNAL %<job_ID>を使用して、そのジョブに信号を送信できます。たとえば、最後のジョブ使用を強制終了するkill -9 %%

どれも機能していない場合は、いつでも送信できます。SIGTERM最後の手段としてSIGKILL、プロセスを終了します。このシグナルは、他のシグナルと同様に、停止しようとしているプロセスと同じユーザーまたはルートとして送信する必要があります。SIGKILLプロセスに送信するには、最初にps auxまたはps -edfでプロセスを見つけ、次にを実行します。kill -SIGKILL <process_ID>ここで<process_ID>は出力のPIDpsです。

プロセスが割り込み不可能な呼び出しにある場合、シグナルは配信できません。割り込み不可能な呼び出しは、停止できないカーネル関数であり、通常、不良ドライバー(再入不可のドライバーなど)が原因で発生します。割り込み不可能なスリープ状態にあるプロセスは、呼び出しが完了するか、サーバーが再起動されるまで停止できません。

プロセスがゾンビになった場合、プロセステーブル内のスペースを使用するだけのリソースは使用しません。ゾンビプロセスはシグナルを受信できません。

現在のアーキテクチャの信号のリストは、 kill -l

manページを参照してくださいkillpsbash。manページを表示するには、次のようなものを使用します。man ps


2

あなたは完全なコンソールアクセスを持っている場合は、行うことができますAlt- F1..12と新しいコンソールを取得します。

そこから、次のようなプロセスリストを作成できます。

ps aux | grep <process-name>

次にkill、プロセスIDを実行します。

kill -9 <pid>

コンソールに完全にアクセスできない場合は、別のターミナルウィンドウを開いて(おそらくPuTTYなどを使用して)、上記のプロセスリストを実行し、手順を終了します。


1

Ctrl Cは、実行中のプロセスにSIGINTを送信します。別のコンソールを開きたくない場合は、Ctrl \でSIGQUITを送信できます。これにより、SIGINTが対応していないほとんどの毎日ハングするアプリに対処できます。

私は個人的にショートカットでSIGKILLを送信する方法を望んでいましたが、そうする方法を知りません。


1

私が考えるpgreppkillより使いやすいようにkill、明示的なプロセスIDを持ちます。

また、シグナル9(SIGKILL)で開始する代わりに、デフォルトのSIGTERM(15)で開始することを検討してください。これにより、プロセスが正常に終了する可能性があります(可能な場合)。 pkill -15 thingそしてpkill thing同等でなければなりません。

これがどのように機能するかを示します。ntpdがハングしたとしましょう。

プロセスは何ですか?(誤検知がないと思われる場合は、スキップしてスキップできます)。

$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd

プロセスを強制終了します。

$ pkill ntpd

pgrepもう一度使用して、成功したかどうかを確認します。

そうでない場合は、最終的にに移動しpkill -9ます。


0

新しい端末に切り替え、スタックしたプロセスのPIDを見つけ(を使用ps)、それを使用killしてプロセスを強制終了します。最初に使用しますkill (PID)。それが機能しない場合は、を使用しますkill -9 (PID)。それでもプロセスが停止しない場合は、マシンを再起動する必要があります。


0

Cntrl+ \私のために働いた(どこでCntrl+ cまたはz働かなかった)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.