回答:
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ます。