私が子fork
プロセスであり、親が呼び出す前に子プロセスが終了した場合waitpid
、によって設定された終了ステータス情報はwaitpid
まだ有効ですか?もしそうなら、それはいつ無効になりますか。つまり、waitpid
子pidを呼び出して、任意の時間が経過した後も有効な終了ステータス情報を取得し続けることができるようにするにはどうすればよいですか。また、「クリーンアップ」するにはどうすればよいですか(終了に関心がなくなったことをOSに通知します)。終了した子プロセスのステータス情報)?
次のコードで遊んでいたところ、終了ステータス情報は子が終了してから少なくとも数秒間は有効であるように見えますが、OSに通知する期間や方法がわかりません。waitpid
再度呼び出す:
#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid = fork();
if (pid < 0) {
fprintf(stderr, "Failed to fork\n");
return EXIT_FAILURE;
}
else if (pid == 0) { // code for child process
_exit(17);
}
else { // code for parent
sleep(3);
int status;
waitpid(pid, &status, 0);
waitpid(pid, &status, 0); // call `waitpid` again just to see if the first call had an effect
assert(WIFEXITED(status));
assert(WEXITSTATUS(status) == 17);
}
return EXIT_SUCCESS;
}