perl 里面调用外部命令是会 fork 一个子进程的,所以也会触发那个信号,想避免可以设置局部变量,例如
$SIG{CHLD} = sub {
print "main\n";
};
.....
{
local $SIG{CHLD} = undef; # 注意调用外部命令的时候,如果 IGNORE 就捕捉不了结果了
`mv xxx yyy`;
system(xxxxx);
}
.....
使用 {} 来构造局部变量的方法有时候会让问题变的非常简单。
另外,信号触发的时候,会把 sleep 中断,这个在 sleep 的 doc 里面说的很明白。如果还是想 sleep 到足够的时间,可以用下面的方法。
my $timeLeft = 10;
while ( 1 ) {
last if $timeLeft <= 0;
my $actTime = sleep($timeLeft);
$timeLeft = $timeLeft - $actTime;
}
越来越感觉写 perl 还是很给力的,很多的奇技淫巧,不过我现在也是属于没弄明白多少,瞎写。