【发布时间】:2015-08-03 17:17:37
【问题描述】:
我是 IPC 新手,谁能给我一个简单的 Perl IPC 示例,其中子可以向其父级发送信号,而父级可以捕获并做出反应。 我尝试了很多东西,但它只有在我按下 control-C 时才会做出反应,而不是像我打算的那样每 5 秒一次...
注意:它适用于 Linux,但不适用于 Windows。
use strict;
use warnings;
my $parent_pid = $$;
my $pid = fork();
if($pid == 0) {
while (1) {
print "In Child...\n";
sleep 5;
print "Sending INT to my parent...\n";
kill 'INT', $parent_pid;
}
}
else {
sub catch_zap {
my $signame = shift;
print "Somebody sent me a SIG $signame!";
}
while(1){
sleep 1;
print "inside parent\n";
eval {
$SIG{INT} = \&catch_zap;
};
}
}
【问题讨论】:
-
你的例子似乎对我有用。由于输出缓冲,您的情况可能没有显示
Somebody sent (...)消息?尝试在该打印语句中添加\n。 -
我添加了
\n,但它仅在我按下 control-c 时打印Somebody sent me a SIG INT!,而不是每 5 秒一次。 -
啊,它在 Linux(perl 5.14 版)上运行良好,但在 windows 上不行,我在 windows 上使用 perl 5.18
-
不是 Perl 的每个方面都可以在 Windows 上工作(就像在 UNIX 上一样,或者有时根本不工作),它也可能取决于 Windows 上 Perl 的分布(例如“DWIM Perl”、“Strawberry” Perl”,“ActiveState Perl”)你也在使用。具体来说,我相信 form()、Signals 和 Pipes 以 UNIX 如何做东西为模型,在 Windows 上的 Perl 中进行了模拟。
标签: perl ipc inter-process-communicat