Как убить процесс по событию Ctrl + C в Rust? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь переопределить событие Ctrl + C с помощью пакета ctrl c. Я хочу убить дочерний процесс в событии. Я сейчас этим занимаюсь.

let mut child = Command::new(shell)
    .arg(option)
    .arg(script)
    .spawn()
    .unwrap();

ctrlc::set_handler(move || {
    println!("Received Ctrl+C!");
    child.kill().expect("Couldn't kill the process!");
})
.expect("Error setting interrupt handler!");

child.wait().unwrap();

Но у меня ошибка cannot borrow child as mutable, as it is a captured variable in a Fn closure. В чем смысл ошибки и как ее решить?

1 Ответ

0 голосов
/ 17 июня 2020

set_handler запускает «новый выделенный поток обработки сигналов».

Кажется, что set_handler ожидает Fn, что, в отличие от FnMut, не может быть мутировал. Поскольку он не может мутировать, он не может мутировать захваченный child.

Вы можете попробовать определить child внутри замыкания и связаться с внешним потоком.

Вы можете попытаться установить sh связь между потоками (например, используя mpsc::channel) вместо wait ing для child в основном потоке. Вы можете попробовать получить stdout / stderr вместо wait ing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...