Hack 93. Kill コマンド

kill コマンドは実行中のプロセスを終了します。
通常このコマンドはハングしたり応答のないプロセスを終了するために使用されます。

Syntax: kill [options] [pids|commands]

ハングしたプロセスを終了するには?

まず、ps コマンドを使用して終了したいプロセスのプロセス id を特定します。
プロセス id が分かったら、kill コマンドに引数としてそれを渡します。
以下の例では、ハングした apache httpd プロセスを終了する方法を示しています。
通常、apache を正常に終了するには、 “apachectl stop” を使用すべきであることに注意してください。

# ps aux | grep httpd

USER     PID %CPU %MEM VSZ     RSS TTY STAT START TIME COMMAND
apache 31186  0.0  1.6 23736 17556   ?    S Jul26 0:40 /usr/local/apache2/bin/httpd
apache 31187  0.0  1.3 20640 14444   ?    S Jul26 0:37 /usr/local/apache2/bin/httpd

# kill 31186 31187 

上記のコマンドは SIGTERM と呼ばれるシグナルを送ることで慎重にプロセスを終了しようとしていることに注意してください。
プロセスが終了しなかった場合、SIGKILL と呼ばれるシグナルを渡すことでプロセスを強制的に終了することができます。
以下に示すように オプション -9 を使用します。
プロセスの所有者であるかプロセスを終了する権限のあるユーザである必要があります。

# kill -9 31186 31187

簡単に複数のプロセスを終了するもう一つの方法は、
.bash_profile に次の2つの関数を追加することです。

function psgrep ()
{
  ps aux | grep "$1" | grep -v 'grep'
}
function psterm ()
{
  [ ${#} -eq 0 ] && echo "usage: $FUNCNAME STRING" && return 0
  local pid
  pid=$(ps ax | grep "$1" | grep -v grep | awk '{ print $1 }')
  echo -e "terminating '$1' / process(es):\n$pid"
  kill -SIGTERM $pid
}

そこで、すべての httpd プロセスを認識し終了するために次のようにします。

# psgrep http 

USER     PID %CPU %MEM VSZ     RSS TTY STAT START TIME COMMAND
apache 31186  0.0  1.6 23736 17556   ?    S Jul26 0:40 /usr/local/apache2/bin/httpd
apache 31187  0.0  1.3 20640 14444   ?    S Jul26 0:37 /usr/local/apache2/bin/httpd

# psterm httpd

terminating 'httpd' / process(es): 
31186
31187