与来自不同线程的std :: process :: Child连接

时间:2016-04-25 08:41:19

标签: multithreading rust

我正在建立一个小主管来管理长时间运行的流程。目前,我正在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();
    //                         ^~~~~~~~~~~~~~~~
}

0 个答案:

没有答案