rust 如何向子进程发送信号?

5jvtdoz2  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(183)

Child::kill发送一个SIGKILL,但是我如何发送任何其他信号,如SIGTERM?我可能可以使用libc及其信号API,但是有更好的方法吗?

2admgd59

2admgd591#

nix库很好地为底层UNIX操作提供了惯用的rust Package 器,包括发送和处理信号。在本例中,您将从child_process.id()创建一个nix::Pid,然后将其传递给kill,如下所示:

use nix::unistd::Pid;
use nix::sys::signal::{self, Signal};

// Spawn child process.
let mut child = std::process::Command::new();
/* build rest of command */
child.spawn().unwrap();

// Send SIGTERM to child process.
signal::kill(Pid::from_raw(child.id()), Signal::SIGTERM).unwrap();
qlvxas9a

qlvxas9a2#

使用kill

kill命令有一堆选项来向进程发送不同的信号。你可以使用.id()来获取child的进程id。
它可能是这样的

let kill = Command::new("kill")
    // TODO: replace `TERM` to signal you want.
    .args(["-s", "TERM", &child.id().to_string()])
    .spawn()?;
kill.wait()?;

相关问题