next up previous contents
Next: 1.6 シャットダウン Up: 1. UNIXシステムの概要と起動・シャットダウン Previous: 1.4 SIGNAL

1.5 Kill コマンド

 ソフト的に、シグナルを発生させるためには、" kill " コマンドを用います。なぜ、シグナルの発生が、 " kill " などという名前なのか、というと、実際には、プロセスを強制終了させる(殺す!)場合に使用されることが多いからだと思われます。
 実際、スーパーユーザの仕事の多くが、「動作がおかしくなってしまったプロセスを強制終了させること」であり、" kill " コマンドは、もっとも多く使われるコマンドの一つです。

終了しなくなったプロセスを殺す例を示しましょう。
cat コマンドは、引数を指定せずに実行すると、標準入力からの入力待ちになります。
このコマンドを、普通に終了させるには、通常は ^C または ^D を入力します。
 UNIXでは、プロセスをバックグラウンドで実行させることができます。そのためには、コマンドの最後に”&”記号を付けて実行します。具体的には、次のようにします。

lxc3% find / -name dummy -print &
[1] 25397
lxc3%

これで、find コマンドがバックグラウンドで実行されました。
find コマンドは、指定のディレクトリ以下の全てのディレクトリから、指定のファイル名を見つけ、出力するもので、これは、かなり時間がかかります。
 このプロセスは、バックグラウンドで実行されているため、、直接キーボード入力を与えることができませんので、このままでは終了できません。そこで、まず、次のようにしてプロセスを調べます。

lxc3% ps -fe | grep find
  fujiki 25399 25365  1 10:56:49 pts/0    0:00 grep find
  fujiki 25397 25365 31 10:56:22 pts/0    0:12 find / -name dummy -print
lxc3%

 ここで、grepコマンドは、指定の文字列を探すコマンドで、 ”|”により、ps コマンドの出力を、パイプを通して、grepに送るものです。
 これにより、たくさんのプロセスの中から、目的のプロセス(この場合は cat コマンド)を、早く見つけることができます。(この方法では、grep コマンド自身も必ず表示されます。)
 これにより、 find コマンドのプロセス番号が、25397 であることが分かりますので、次のようにして、プロセスを殺してやります。

lxc3% kill 25397
lxc3%

 本当に死んだかどうか、もう一度プロセス表示で確かめてみます。

lxc3% ps -fe | grep find
  fujiki 25403 25365  1 10:57:38 pts/0    0:00 grep find
[1]  + 終了(ソフトウェア終了シグナル)find / -name dummy -print
lxc3%

 どうやら、プロセスは死んだようですね。
 しかし、この方法では、死んでくれないプロセスもあります。このような場合は、kill コマンドを次のように使います。

          $ kill -9 25397
          $

ここで、

「kill」と「kill -9」との違いは、 kill が、プロセスに対して、後処理を含めて、きちんと終了しなさい、と、指示するのに対して、 kill -9 は、後処理も何も要らないから、直ちに終了しなさい、と、指示するものです。ですから、後者の方法では、処理中のファイル等の内容が失われる、等の不都合が起こる場合があります。

実際には、ウインドウを立ち上げずに、コンソールから使っている場合には、コマンドが言うことを効かなくなったときには、kill コマンドすら入力できませんが、ウインドウが立ち上がって、複数のターミナルが開いているときには、どれか一つのウインドウが死んでも、他のウインドウから、死んでいるコマンドを調べて、そのプロセスを殺すことができます。
(ウインドウの立ち上がっていない場合でも、ネットワーク接続されていれば、ネットワーク経由でプロセスを殺すことが可能です。)



Noriyo Kanayama