如何向“子”子进程发送信号?

问题描述 投票:0回答:2

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

rust signals
2个回答
28
投票

nix
库在为低级 UNIX 操作(包括发送和处理信号)提供惯用的 Rust 包装器方面做得很好。在这种情况下,您将从 nix::Pid
 创建一个 
child_process.id()
,然后将其传递给 
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();

4
投票

使用
kill

kill
命令有一堆选项可以向进程发送不同的信号。 您可以使用
child
获取
.id()
的进程ID。

会是这样的

let kill = Command::new("kill")
    // TODO: replace `TERM` to signal you want.
    .args(["-s", "TERM", &child.id().to_string()])
    .spawn()?;
kill.wait()?;
© www.soinside.com 2019 - 2024. All rights reserved.