下面的代码执行一个命令,然后使您能够使用Ctrl + C退出进程:
use std::process::Command;
use termion::event::Key;
use termion::input::TermRead;
use termion::raw::IntoRawMode;
use std::io::{stdin, stdout, Write};
fn main() {
let stdin = stdin();
let mut stdout = stdout().into_raw_mode().unwrap();
let mut command = Command::new("script");
command
.arg("-qec")
.arg("sleep 5 && echo test")
.arg("/dev/null");
let output = command.output();
println!("output: {:?}", output);
for c in stdin.keys() {
match c.unwrap() {
Key::Char(c) => println!("{}\r\n", c),
Key::Ctrl('c') => {
println!("Ctrl + C\r\n");
write!(stdout, "{}", termion::cursor::Show).unwrap();
std::process::exit(0);
}
_ => {}
}
stdout.flush().unwrap();
}
}
Rust Playground
您必须等待命令执行,才能按Ctrl + C并退出程序。
如何在后台监听Ctrl + C,以便即使命令正在运行,进程也可以退出(像在非原始模式下一样中断命令)?
1条答案
按热度按时间qzlgjiam1#
我不确定这是不是最好的方法,但它确实有效。我生成了三个并发线程:一个用于
stdout
,另一个用于stderr
,第三个用于监听Ctrl + C。注意:ctrl似乎不能在Termion的raw模式下工作。