我正在寻找一种方法,以便在孩子即将结束或刚刚结束时,从父级访问孩子的任务结构我不想使用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
}
这样可以确保父级阻塞直到子级终止,但仍会使子级僵尸留在系统中。
如果要等待具有pid
X
的特定子进程,请使用waitid(P_PID, X, &siginfo, WNOWAIT)
。儿童的退出状态可以从
siginfo.si_status
检索。参见man waitid
了解siginfo
中的其他字段。关于c - 等待子进程而不释放其资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30632364/