私はUbuntuシステム上のSIGCHLDシグナルハンドラのperlシグナルハンドラ関数を扱っています。 sa_siginfoを取得するために、私はsigaction.Nowから得るバイナリデータをアンパックしています。私はsi_codeを "25"として取得しています。それを解釈する方法はhttp://man7.org/linux/man-pages/man2/sigaction.2.htmlを見て?それはビットマスクではなく、価値だと言います。私は取得しています 出力は次のとおりです。si_statusの値を解釈する方法
in order : signo sicode sigval sigerro sigpid siuid siaddr sistatus siband 17 0 1 0 21225 0 0 25 0
SIGNO、PIDが正しく展開されている、私はそれがだ、私はそれはsi_status
(ないsi_code
)だ25
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
いいえ、それはマニュアルページのことではありません。私は既に、終了コード以外のものを返すことができることを示しました。マニュアルページは実際に私がしたのと同じことを言います。マニュアルページを引用し、 'si_status'を解釈する方法を示すだけでなく、アンパック時のいくつかのエラーを修正した私の更新された私の答えを見てください。 – ikegami