我正在建立一个小主管来管理长时间运行的流程。目前,我正在std::process::Command
使用.spawn()
获取std::process::Child
。
我想要达到的目标是:让一个帖子.wait()
在这个孩子身上(最终在频道上返回一条消息),另一个人在一个频道上等待" KILL"消息,然后将呼叫孩子的.kill()
。
但是,儿童不是Clone
,而.wait()
和.kill()
都是&mut self
...所以我运气不好?我不认为我可以使用互斥锁,因为.wait()
需要阻止。
当前PoC就在这里......
use std::process::{Command};
fn main() {
let child = Command::new("long_running_process")
.arg("something_something")
.spawn().unwrap();
// now, I want to have two threads; one doing child.wait(), one waiting on a mpsc or ZMQ
// channel to get a "KILL" message.
// This doesn't work.
{
let sub_child = child.clone();
std::thread::spawn(move || {
sub_child.wait();
});
}
// repro.rs:13:31: 13:36 error: no method named `clone` found for type `std::process::Child` in the current scope
// repro.rs:13 let sub_child = child.clone();
// ^~~~~
// repro.rs:15:13: 15:29 error: the type of this value must be known in this context
// repro.rs:15 sub_child.wait();
// ^~~~~~~~~~~~~~~~
}