ソフト的に、シグナルを発生させるためには、" 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 コマンドすら入力できませんが、ウインドウが立ち上がって、複数のターミナルが開いているときには、どれか一つのウインドウが死んでも、他のウインドウから、死んでいるコマンドを調べて、そのプロセスを殺すことができます。
(ウインドウの立ち上がっていない場合でも、ネットワーク接続されていれば、ネットワーク経由でプロセスを殺すことが可能です。)