#!/usr/bin/perl
use POSIX ":sys_wait_h";
$SIG{CHLD} = \&REAPER;
sub REAPER {
my $pid;
while (($pid = waitpid(-1, WNOHANG)) > 0) {
print "where is here,$pid\n";
}
}
sub child {
print "I'm child, pid=$$.\n";
sleep 2;
}
$lid = fork();
if ($lid == 0) {
&child;
exit;
} else {
sleep 1000;
print "I am parent, child pid : $lid\n";
}
出力:
I'm child, pid=11839.
where is here,11839
I am parent, child pid : 11839
上記は私の Perl スクリプトです。I am parent, child pid : 11839
出力は正しいのですが、最後の出力の直後に印刷されるという奇妙な点が 1 つあります。なぜ効果がなかったのsleep 1000
ですか?