Child::kill发送一个SIGKILL,但是我如何发送任何其他信号,如SIGTERM?我可能可以使用libc及其信号API,但是有更好的方法吗?
Child::kill
SIGKILL
SIGTERM
libc
2admgd591#
nix库很好地为底层UNIX操作提供了惯用的rust Package 器,包括发送和处理信号。在本例中,您将从child_process.id()创建一个nix::Pid,然后将其传递给kill,如下所示:
nix
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();
qlvxas9a2#
kill命令有一堆选项来向进程发送不同的信号。你可以使用.id()来获取child的进程id。它可能是这样的
.id()
child
let kill = Command::new("kill") // TODO: replace `TERM` to signal you want. .args(["-s", "TERM", &child.id().to_string()]) .spawn()?; kill.wait()?;
2条答案
按热度按时间2admgd591#
nix
库很好地为底层UNIX操作提供了惯用的rust Package 器,包括发送和处理信号。在本例中,您将从child_process.id()
创建一个nix::Pid
,然后将其传递给kill
,如下所示:qlvxas9a2#
使用
kill
kill
命令有一堆选项来向进程发送不同的信号。你可以使用.id()
来获取child
的进程id。它可能是这样的