我正在寻找一种方法,以便在孩子即将结束或刚刚结束时,从父级访问孩子的任务结构我不想使用wait/waitpid的原因是,在wait完成后,task_struct和其他东西将被释放。
父进程是否可以等待子进程结束而不调用wait(这样仍然可以从僵尸进程访问task_struct)?
有什么办法可以试试吗?

最佳答案

您可以使用waitid(2)标志调用WNOWAIT以下是手册的摘录:
WNOWAIT公司
让孩子处于等待状态;稍后的等待呼叫可以
用于再次检索子状态信息。
所以,就像这样:

siginfo_t siginfo;
if (waitid(P_ALL, 0, &siginfo, WNOWAIT) < 0) {
    // Handle error...
} else {
    // PID of terminated child lives in siginfo.si_pid
}

这样可以确保父级阻塞直到子级终止,但仍会使子级僵尸留在系统中。
如果要等待具有pidX的特定子进程,请使用waitid(P_PID, X, &siginfo, WNOWAIT)
儿童的退出状态可以从siginfo.si_status检索。参见man waitid了解siginfo中的其他字段。

关于c - 等待子进程而不释放其资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30632364/

10-10 17:36