问题描述
我有一个使用 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 (将#修改为@)