gpt4 book ai didi

process - 如何在 Rust 中存储进程

转载 作者:行者123 更新时间:2023-11-29 08:17:13 26 4
gpt4 key购买 nike

我想在 rust 的结构中存储一个 std::io::process::Process。但是,一旦我将 Process 实例传递给结构,程序就会失效。这是为什么?代码:

use std::io::process::{Command, Process};
use std::rc::Rc;
use std::cell::RefCell;

struct DzenInst {
process: Rc<RefCell<Process>>
//stdin: std::io::pipe::PipeStream
}

impl DzenInst {
// Write a string to the stdin of dzen
fn write(&mut self, s : String) {
let mut stdin = self.process.borrow_mut().stdin.take().unwrap();
println!("Writing to dzen inst");
match stdin.write_str((s + "\n").as_slice()) {
Err(why) => panic!("couldn't write to dzen stdin: {}", why.desc),
Ok(_) => println!("Wrote string to dzen"),
};
}
}

fn CreateDzen() -> DzenInst {
DzenInst {process: Rc::new(RefCell::new(
match Command::new("dzen2").spawn() {
Err(why) => panic!("couldn't spawn dzen: {}", why.desc),
Ok(process) => process,
}))}
}

fn main() {
let mut d1 = CreateDzen();
d1.write("Test".to_string());

std::io::timer::sleep(std::time::duration::Duration::seconds(1));
}

如果我在 CreateDzen 中立即写入进程标准输入,那么它工作正常(即程序不会失效)。我假设复制 Process 实例会导致调用其析构函数,从而关闭进程。有什么想法可以存储 Process 实例而不导致进程失效吗?

最佳答案

您的 Rust 代码没问题。这里的问题是dzen2。您需要添加 -p 标志以使 dzen2 持久化 EOF(在 dzen2 README 中)。

代替

match Command::new("dzen2").spawn() {

使用

match Command::new("dzen2").arg("-p").spawn() {

关于process - 如何在 Rust 中存储进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com