#child-process #process #tokio #pipe #async

pwner

Pwner是一个进程所有者crate,允许以便捷的方式访问子进程

8个版本

0.1.8 2022年11月15日
0.1.7 2021年10月22日
0.1.5 2020年11月15日
0.1.3 2020年4月7日

#450 in 异步

每月43次下载
rucline中使用

MIT许可证

52KB
601

pwner

Github MIT licensed Cargo Documentation

Pwner是一个进程所有者crate,允许以便捷的方式访问子进程。

此模块创建了拥有子进程的可能性,并提供方便的读写方法,同时在释放时优雅地终止进程。

启动拥有的进程

use std::process::Command;
use pwner::Spawner;

Command::new("ls").spawn_owned().expect("ls command failed to start");

读写

use std::io::{BufRead, BufReader, Write};
use std::process::Command;
use pwner::Spawner;

let mut child = Command::new("cat").spawn_owned()?;
child.write_all(b"hello\n")?;

let mut output = String::new();
let mut reader = BufReader::new(child);
reader.read_line(&mut output)?;

assert_eq!("hello\n", output);

停止拥有的进程

当拥有的进程被释放时,将终止。

示例

use std::process::Command;
use pwner::Spawner;

{
    let child = Command::new("ls").spawn_owned().expect("ls command failed to start");
}
// child is killed when dropped out of scope

优雅释放

注意:仅在*nix平台上可用。

当拥有的进程被释放时,Process将尝试通过发送SIGINT优雅地杀死它。如果进程仍然没有死亡,将发送SIGTERM并再次给予机会,直到最后发送SIGKILL

依赖

~2–13MB
~109K SLoC