0

sa_sigaction 関数は、子プロセスの状態の変化に応じて「si_code」と「si_status」を保持する引数 siginfo_t を取ります。WIFEXITED、WIFTERMINATED、WIFSTOPPEDなどの関数に渡すことができるステータス整数である1つの整数を取るライブラリ関数を使用しています。

この整数を siginfo_t 構造体から導出する方法はありますか?

よろしく、ダニエル。

4

1 に答える 1

2

のシグナルハンドラーがあると仮定しています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 */
}

ただし、プロセス テーブルからプロセスを取得するには、子プロセスを明示的に待機する必要があります。

于 2013-06-11T21:57:59.310 に答える