回答:
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>
は出力のPID
列ps
です。
プロセスが割り込み不可能な呼び出しにある場合、シグナルは配信できません。割り込み不可能な呼び出しは、停止できないカーネル関数であり、通常、不良ドライバー(再入不可のドライバーなど)が原因で発生します。割り込み不可能なスリープ状態にあるプロセスは、呼び出しが完了するか、サーバーが再起動されるまで停止できません。
プロセスがゾンビになった場合、プロセステーブル内のスペースを使用するだけのリソースは使用しません。ゾンビプロセスはシグナルを受信できません。
現在のアーキテクチャの信号のリストは、 kill -l
manページを参照してくださいkill
、ps
とbash
。manページを表示するには、次のようなものを使用します。man ps
私が考えるpgrep
とpkill
より使いやすいように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
ます。