シグナル(Unix)

0pt

シグナル(signal)とは、UNIX系オペレーティングシステムにおいてプロセス間で非同期イベントの発生を伝える機構。

UNIX系およびPOSIX準拠のオペレーティングシステムでは、シグナルの種類と使用法が規定されている。

http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29


通常のプログラムだと、 "Ctrl + z" で処理を中断、"fg"で処理を再開できるよ!

perlでシグナルをキャッチする


Ctrl + C でプログラムを終了するときにリソースを開放してやると良いのでなかろうか。

下のコードは Ctrl + c(割り込み), Ctrl + z(中断), Ctrl + \(終了)

#!/bin/perl

use strict;
use warnings;

my $flag = 1;
$| = 1;

$SIG{'STOP'} = sub {
    print "STOP!!\n";
};

$SIG{'TSTP'} = sub {
    print "TSTP!!\n";
# シグナルをキャッチしたままだと停止しないので、
# SIGSTOP(19)を送信しなおす
    kill(19, $$);   
};

$SIG{'CONT'} = sub {
    print "CONT\n";
};

$SIG{'INT'} = sub {
    print "KILLED\n";
    die;
};

# SIGQUIT は Ctrl + \ で発生します。
$SIG{'QUIT'} = sub {
    $flag = 0;
    print "BYE!!\n";
};

my $counter = 1;
while ($flag) {
    sleep 1;
    if ($counter % 5 == 0) {
        kill(20, $$);   # SIGTSTP(20) を送る
    }
    print ".";
    print $counter++;
}

「シグナル(Unix)」について友人に書いてもらう。

あなたにとって「シグナル(Unix)」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

関連したキーワードを持つお気に入り

他の人の「シグナル(Unix)」を見る