您好 我尝试在我 树莓派上运行RUST 不知道如何使它在后台运行
注意: 该环境没有nohup 也无法安装它
我的尝试是监听系统的信号而不去让我退出的信号
use std::thread;
use signal_hook::{iterator::Signals, SIGINT};
fn main() {
let signals = Signals::new(&[SIGINT]).unwrap();
let a = thread::spawn(move || {
for sig in signals.forever() {
println!("Received signal {:?}", sig);
}
});
// 处理逻辑 此处省略 ...
a.join().unwrap();
}
but 貌似还是不行 您有更好的解决方法吗?期待您的回复
最终的修改
use std::process::Command;
use std::thread;
use std::env;
use std::time::Duration;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() == 2 {
if &args[1] == "start" {
// 主进程启动 子进程
let child = Command::new(&args[0])
.spawn().expect("Child process failed to start.");
println!("child pid: {}", child.id());
// 主进程退出
// child.forget() No Child Left Behind
}
} else {
// 这里为业务逻辑....
let mut i = 1;
loop {
i += 1;
println!("i: {}",i);
thread::sleep(Duration::from_millis(500));
}
}
}
按照这个逻辑可以使 改程序在后台运行 BUT 关闭当前窗口 会退出 (可以通过监听信号来解决这个问题)
一个非常神奇的就是 在后台运行println!()
这打印的内容会在前台显示
更新:
要使进程变为守护进程的主要步骤为:
参考:
参考:https://medium.com/@benmorel/...