Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発なら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関数をご覧ください。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。