Perl 스크립트에서 내가 INT
및 QUIT
신호를 차단하고 백틱 내에서 프로세스를 실행 한 다음 차단을 해제하는 데 문제가 있습니다. INT
및 QUIT
신호. INT
또는 QUIT
이 하위 프로세스에 도달하여이를 삭제하지 못하도록하고 싶습니다.Perl : 차단 신호가 지연되지 않음 -> 테스트 코드 제공
스크립트가 코드의 올바른 지점에서 성공적으로 차단 및 차단 해제되지만 신호를 지연시키지 않고 차단 모드에서 구성한 처리기를 실행하지 않습니다. 블록 또는 차단 해제 명령 전후에 SIGINT
을 보낼 수 있기 때문에 블록 해제 중임을 알고 존중됩니다.
OS : 리눅스 2.6.30 Perl 버전 : 5.8.8
코드 조각 :
#!/usr/local/bin/perl
use POSIX qw(:signal_h);
$SIG{'INT'} = 'gracefulExit';
sub gracefulExit { print "Caught Signal = GOOD\n"; exit; }
print "Recieving a SIGINT works here\n";
sleep 5;
my $sigset = POSIX::SigSet->new;
my $blockset = POSIX::SigSet->new(SIGINT);
sigprocmask(SIG_BLOCK, $blockset, $sigset) or die "dying at block...\n";
print "Recieving a SIGINT doesn't work here [GOOD!] and is NOT delayed [WHY!?].\n";
`/bin/sleep 5`;
sigprocmask(SIG_UNBLOCK, $blockset) or die "dying at unblock...\n";
print "Recieving a SIGINT works here again [GOOD!]\n";
sleep 5;
print "Exited without receiving a signal\n";
어떤 운영체제입니까? – hlovdal
OS : Linux 2.6.30 –
"system"또는 qx (backquotes라고도 함)를 사용하지 마십시오. 둘 다 가장 일반적인 사용자가 원하는 방식으로 신호를 설정합니다. 대신 fork/exec를 사용하면 신호를 정확하게 제어 할 수 있습니다. –