我编写了以下代码来测试孩子和父母之间的信号传递。理想情况下,当子进程向父进程发出 SIGINT 时,父进程应该在新的迭代中返回并等待用户输入。我在 perl 5.8 中观察到了这一点,但在 perl 5.6.1(我被要求使用)中,父级实际上被“杀死”了。没有下一次迭代。
my $parent_pid = $$;
$pid = fork();
if($pid == 0)
{
print "child started\n";
kill 2, $parent_pid;
}
else
{
while(1)
{
eval
{
$SIG{INT} = sub{die "GOTCHA";};
print 'inside parent'."\n";
$a = <>;
};
if($@)
{
print "got the signal!!!!\n$@\n";
next;
}
}
}
有人可以提供解决此问题的方法或其他方式来向父级发出信号以使其进入新的迭代吗?
5.6.X 上的失败可能是由于 Perl 处理信号的方式造成的,该方式已修复Perl 5.8.0 中的“安全信号处理” http://search.cpan.org/dist/perl-5.8.0/pod/perldelta.pod#Safe_Signals。无论哪种情况,您使用的 Perl 实际上都是考古学的,您应该向您的大师强烈争论,您应该至少使用 Perl 5.12,最好是 5.14。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)