【发布时间】:2012-05-17 07:16:13
【问题描述】:
我编写了以下代码来测试孩子和父母之间的信号。理想情况下,当孩子向父母提供 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;
}
}
}
有人可以为这个问题提供一个解决方法或以其他方式向父级发出信号,以便它进入新的迭代。
【问题讨论】:
-
抱歉,无法重现。
-
Windows 既没有
fork也没有信号。这些是unix概念。 Perl 模仿它们。你的问题源于此。 -
是的,fork() 和信号仿真在 Windows 上使用最新版本的 Perl 会变得更好。您可能希望直接从 Win32::IPC 使用 Windows 同步对象。
标签: perl fork multiprocessing signals kill