7

子プロセスである特定の実行中のプロセスグループを待機すると、WIFEXITEDはプロセスが終了したことを示すtrueを返しますか?これはそれが機能する方法ですか?わからないことがあるようです…。

if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
    perror("Wait error");

if ( WIFEXITED(pstatus) ) {
    strncpy(buf,  "Exited", buf_size);
    return 0;
4

2 に答える 2

6

あなたが指定したように、WNOHANGwaitpidは戻っ0pstatusきて、以前に持っていた値を持っていると思うのでWIFEXITED、更新されたデータでは機能していません。

指定され、WNOHANGで指定された1つ以上の子がpid存在するが、まだ状態が変更されていない場合は、0が返されます。

于 2009-10-29T12:17:48.677 に答える
1

waitpid子を正常に刈り取ると、刈り取られた子pidを返します。と一緒に使用するとWNOHANG、子が存在しない場合はすぐに0を返します。したがって、を検査する前に、戻り値が0であるかpidであるかを確認する必要がありますstatus。詳細については、こちらをご覧ください。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html

于 2011-02-03T08:07:32.897 に答える