微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?