나는 Ubuntu 시스템에서 SIGCHLD 신호 처리기를위한 perl 신호 처리기 함수로 작업 중이다. sa_siginfo를 얻으려면 sigaction.Now에서 얻은 이진 데이터를 언 패킹 할 때 "25"로 si_code가 표시됩니다. 저것을 해석하는 방법 http://man7.org/linux/man-pages/man2/sigaction.2.html을 보는가? 그것은 비트 마스 크가 아니라 값이라고합니다. 나는 점점 오전 출력은 다음과 같습니다si_status 값을 해석하는 방법
이 SIGNO는, PID가 올바르게 압축 해제되는in order : signo sicode sigval sigerro sigpid siuid siaddr sistatus siband 17 0 1 0 21225 0 0 25 0
, 나는 "si_status"그것은 si_status
(안 si_code
)의
POSIX::sigaction(
POSIX::SIGCHLD,
POSIX::SigAction->new(
sub{
my $args = \@_;
my $pid = unpack "x16S",$_[2];
my($signo,$sicode,$sigval,$sigerro,$sipid,$siuid,$siaddr,$sistatus,$siband) = unpack "iiiiisssii" ,$_[2];
print "\n in order : signo sicode sigval sigerro sigpid siuid siaddr sistatus siband ";
print (join (" ", $signo, $sicode , $sigval , $sigerro ,$sipid ,$siuid ,$siaddr ,$sistatus ,$siband));
}
0,
POSIX::SA_SIGINFO),
);
감사합니다 :) .. 내가 si_code과 si_status 사이에 혼동되었다 생각합니다. man 페이지는 자식의 종료 코드라고 말합니다. – Ameyj
아니요, 맨 페이지가 말하는 것과 다른 것이 아닙니다. 이미 종료 코드가 아닌 다른 것을 반환 할 수 있음을 보여 줬습니다. man 페이지는 실제로 내가 한 것과 똑같은 것을 말합니다. 매뉴얼 페이지를 인용하고'si_status'를 해석하는 방법을 보여주는 것 외에 패키지를 풀 때 약간의 오류를 수정하는 나의 업데이트 된 답변을보십시오. – ikegami