我正试图在使用信号的进程之间实现通信。首先,家长启动子流程,完成一些工作,然后等待孩子的消息,然后再次给孩子发信号,以便孩子可以继续处理等等。在进程间发送消息在Perl中
我不知道什么是实现这个正确的做法,但这里是我第一次尝试:
use warnings;
use strict;
use feature qw(say);
my $forever=1000000;
my $parPID=$$;
my $child = fork();
if($child == 0){
runSubProc($parPID,$forever);
}
$SIG{"USR1"}=sub {
say "Parent: got signal 1";
$SIG{"USR1"}=sub {
say "Parent: got signal 2";
exit 0;
};
sleep 5;
kill 'USR1', $child;
sleep $forever;
};
say "Waiting for child processes..";
sleep $forever;
sub runSubProc {
my ($parPID,$forever)[email protected]_;
$SIG{"USR1"}=sub {
say "Child: got signal 1";
$SIG{"USR1"}=sub {
say "Child: got signal 2";
exit 0;
};
sleep 7;
kill 'USR1', $parPID;
sleep $forever;
};
sleep 5;
kill 'USR1', $parPID;
sleep $forever;
}
这不起作用,输出结果是:
Waiting for child processes..
Parent: got signal 1
Child: got signal 1
,然后将其挂起..
尝试使用'strace -fTt。/ scriptname'运行。我猜想你的信号不止一次被解雇 - 记住'信号处理器'是救市,而不是重新进入。 我认为你的问题的核心将是 - 你正在信号处理程序中重新定义你的'信号处理程序'。但我会有一个小提琴,看看我能否成功。 – Sobrique 2014-08-29 14:23:06