我编写了以下代码来测试子进程和父进程之间的信号传递。理想情况下,当子进程向父进程发送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;
}
}
}
有人能否提供解决这个问题的方法或其他方式,以便向父级发送信号,使其进入新迭代。
fork
也没有信号(signals)的概念,这些都是Unix的概念。Perl语言模拟了它们,你所遇到的问题就是由于此造成的。 - ikegami