在 Rust 中收割子进程,如何通过 PID 查找子进程?

问题描述

我有一个使用 std::process::Command::spawn 的程序,它会产生僵尸。

我很清楚父进程 must read out 子进程退出代码,否则会发生僵尸进程。这也是 warned about 在 Rustdocs 中的 std::process,并且在 SO 和网络上有很好的解释。

问题是,子进程在整个程序中由 pid 标识;但我没有看到构造一个 Child 指代已知的预先存在的 pid方法。因此我无法调用 wait()

std/process.rs source 开始,我可以猜测 crate::sys::process 可能会公开一个可直接调用waitpid() 包装器,我可以将裸 pid_t 整数传递给它。但我也不太容易深入 Rust stdlib 的内部结构,尤其是出于这种平凡的原因。以这种方式编写代码感觉不对。

另一种解决方案可能是,为了尝试保留 Child 对象,从 spawn() 调用到终止处理程序,将它们而不是它们的 pid 全部携带......这在这个程序中还有很长的路要走,并且需要大量重构。有一个进程标识符也感觉很奇怪,它实际上不能用作 ID,而是强迫我携带所有其他字段的完整记录。

这种情况能得到帮助吗?我对 Rust 开发过程并不十分熟悉;提交一个问题,将此作为标准库缺陷?我错过了另一种方式吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)