gpt4 book ai didi

c - 等待子进程而不释放其资源

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:25 24 4
gpt4 key购买 nike

我正在寻找一种在 child 即将结束或刚刚结束时从 parent 那里访问 child 的 task_struct 的方法。我不想使用 wait/waitpid 的原因是因为等待完成后,task_struct 和其他东西被释放。

有没有办法让父进程等待子进程结束而不调用wait(这样task_struct仍然可以从僵尸进程访问)?有什么可以尝试的想法吗?

最佳答案

您可以使用 WNOWAIT 标志调用 waitid(2)。以下是联机帮助页的摘录:

WNOWAIT

Leave the child in a waitable state; a later wait call can be used to again retrieve the child status information.

所以,像这样:

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 检索 child 的退出状态。请参阅 man waitid 以了解 siginfo 中的其他字段。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com