RUST 如何在后台运行? 不使用nohup
您好 我尝试在我 树莓派上运行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!()
这打印的内容会在前台显示
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
更新:
要使进程变为守护进程的主要步骤为:
参考:
参考:https://medium.com/@benmorel/...
我写一个一个小程序 https://github.com/dollarkill...
经过测试 只要监听这些信号
就能在终端关闭后不被关闭
但是不够优雅 我希望该程序一启动就在后台运行
请问在RUST中有什么优雅的解决方法吗?