신호를 사용하는 프로세스간에 통신을 구현하려고합니다. 먼저 부모 프로세스가 자식 프로세스를 시작하고 작업을 수행 한 다음 자식 메시지를 기다린 다음 자식 프로세스에 다시 신호를 보내 프로세스를 계속 진행할 수 있습니다.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