sa_sigaction 関数は、子プロセスの状態の変化に応じて「si_code」と「si_status」を保持する引数 siginfo_t を取ります。WIFEXITED、WIFTERMINATED、WIFSTOPPEDなどの関数に渡すことができるステータス整数である1つの整数を取るライブラリ関数を使用しています。
この整数を siginfo_t 構造体から導出する方法はありますか?
よろしく、ダニエル。
のシグナルハンドラーがあると仮定していますSIGCHLD
。これは、子プロセスが終了したことを意味します。その後、シグナルハンドラwaitpid()
は終了ステータスを取得するために使用できます。
pid_t pid;
int status;
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
/* use appropriate macros to check status */
}
を使用している場合、コールバックSA_SIGINFO
の 2 番目のパラメータにsa_sigaction
は終了ステータスがあります。
if (info->si_code == CLD_EXITED) {
/* info->si_status is the exit status */
}
ただし、プロセス テーブルからプロセスを取得するには、子プロセスを明示的に待機する必要があります。