プロセスの終了

プロセスを終了するには、通常、kill コマンドを使用します。

kill コマンドは、指定されたプロセスにシグナルを送信します。 シグナルのタイプとプロセスで実行されているプログラムの性質に応じて、プロセスは実行を終了する場合と、実行を継続する場合とがあります。 送信されるシグナルには、次のものがあります。

項目 説明
SIGTERM (シグナル 15) はプログラムを終了させる要求です。 アプリケーションを実際には終了しない SIGTERM のシグナル・ハンドラーがプログラムにあるときは、この kill はなにも作用しません。 これは kill によって送信されるデフォルト・シグナルです。
SIGKILL (シグナル 9) はプロセスを即時に強制終了させる指示です。 このシグナルは捕獲することも、無視することもできません。
通常、SIGKILL ではなく SIGTERM を出す方が望ましいです。 プログラムに SIGTERM のハンドラーがあれば、終結処理を行って、秩序正しく終了することができます。 タイプ:
kill -term ProcessID
(-term は省略できます。) プロセスが SIGTERM に応答しないときは、次のように入力します。
kill -kill ProcessID
ゾンビ とも呼ばれる、使用されていないプロセス が、時々プロセス表に存在している場合があります。 これらのプロセスは、既に実行されず、システム・スペースも割り当てられて いませんが、依然として PID 番号をもっています。 プロセス表のゾンビ・プロセスは、CMD カラムに <defunct> と表示されるため、認識できます。 次に例を示します。
 UID   PID  PPID   C    STIME    TTY  TIME CMD
                             .
                             .
                             .
 lee 22392 20682   0   Jul 10      -  0:05 xclock
 lee 22536 21188   0   Jul 10  pts/0  0:00 /bin/ksh
 lee 22918 24334   0   Jul 10  pts/1  0:00 /bin/ksh
 lee 23526 22536  22                  0:00 <defunct>
 lee 24334 20682   0   Jul 10      ?  0:00 aixterm
 lee 24700     1   0   Jul 16      ?  0:00 aixterm
root 25394 26792   2   Jul 16  pts/2  0:00 ksh
 lee 26070 24700   0   Jul 16  pts/3  0:00 /bin/ksh
 lee 26792 20082   0   Jul 10  pts/2  0:00 /bin/ksh
root 27024 25394   2 17:10:44  pts/2  0:00 ps -ef
親プロセスが消滅するか、システムがシャットダウンされ再始動されるまでは、ゾンビはプロセス表に存在し続けます。 上記の例では、親プロセス (PPID) は ksh コマンドです。 Korn シェルが終了すると、使用されていないプロセスはプロセス表から除去されます。

アプリケーションが、複数の子プロセスを fork し、終了していないので、プロセス表に多くの使用されていないプロセスが集まる場合があります。 これが問題になる場合、最も単純な解決策はアプリケーションを変更して、sigaction サブルーチンが SIGCHLD シグナルを無視するようにすることです。