2019年10月22日火曜日

開発環境

初めてのPerl 第7版 (Randal L. Schwartz(著)brian d foy(著)Tom Phoenix(著)近藤 嘉雪(翻訳)嶋田 健志(翻訳)オライリージャパン)の15章(プロセス管理)、15.9(練習問題)4の解答を求めてみる。

コード

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use v5.18;
use Encode::Locale;
binmode STDIN, ':encoding(console_in)';
binmode STDOUT, ':encoding(console_out)';
binmode STDERR, ':encoding(console_out)';

say '4.';

say "pid $$";

my @signals = split ' ', `kill -l`;

open STDOUT, '>', 'signals.txt';
for (sort @signals) {
    my $sig_name = uc $_;
    $SIG{$sig_name} = sub {
        if ($sig_name eq 'INT') {
            exit;
        }
        state $n = 0;
        $n++;
        say "$sig_name: ${n}回目";
    };
}

while (1) {}

入出力結果(Zsh、cmd.exe(コマンドプロンプト)、Terminal)

% ./sample4.pl &
[1] 94099
% 4.
pid 94099

% kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2
% kill -HUP 94099 
% kill -HUP 94099
% kill -USR1 94099
% kill -USR2 94099
% kill -USR2 94099
% kill -TRAP 94099
% kill -TRAP 94099
% kill -USR2 94099
% kill -INT 94099
[1]  + done       ./sample4.pl                                                  
% cat signals.txt 
HUP: 1回目
HUP: 2回目
USR1: 1回目
USR2: 1回目
USR2: 2回目
TRAP: 1回目
TRAP: 2回目
USR2: 3回目
%

0 コメント:

コメントを投稿