Perl入門ゼミ

  1. Perl
  2. 標準関数
  3. here

kill関数 - プロセスにシグナルを送信する

kill関数を使用すると、プロセスを終了させることができます。

kill(シグナル番号, プロセスID);

第一引数には、シグナル番号を指定します。

第二引数には、プロセスIDを指定します。

戻り値は、kill関数が成功した数が返ってきます。

以下のように、リストにして、複数のプロセスIDを指定することもできます。

kill(シグナル番号, プロセスID1, プロセスID2, ...);

プロセスIDを取得する

kill関数の第二引数には、プロセスIDを指定しますが、このIDは、Linuxの場合であれば「ps -ef」を実行すれば、取得することができます。

たとえば、以下ではサーバープロセスが立ち上がっているのですが、左から2列目が、プロセスIDです。左から3番目は、親プロセスのプロセスIDです。

kimoto   20220 25715  0 Dec25 ?        00:05:35 /home/kimoto/labo/perltweet/script/perltweet

たとえば、左から2番目の「20220」という番号が、プロセスIDです。これがkillに指定するプロセスIDになります。

シグナルの番号を取得する

シグナルの一覧は、Configモジュールを読み込んで「$Config{sig_name}」で見ることができます。

use Config;

use Data::Dumper;

print Dumper $Config{sig_name};

1番目から順番に並んでいるので、この番号がシグナル番号になります。

シグナルが受信可能かどうかをチェックする

シグナル番号0は、特殊な番号で、対象のプロセスが、シグナルを受信可能かどうかをチェックすることができます。

my $success = kill(0, プロセスID);

これは、子プロセスが、実際に生存しているかをチェックしているのに利用することができます。

Windowsのforkの子プロセスに対してはうまく動かない

kill関数は、Linux/Unixベースのforkの子プロセスに対しては、うまく動きますが、Windowsのforkの子プロセスに対しては、正しく動かないことに注意してください。

kill関数の詳細についてはPerl公式ドキュメントのkill関数をご覧ください。