Linux后台运行进程

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2023年2月2日 (四) 04:31的版本 →‎总结
跳到导航 跳到搜索

示例

root@raspberrypi:/opt/chfs-linux-arm-2.0# cat start.sh
nohup ./chfs --path="/mnt/data" > out.log 2>&1 &



参考

https://www.bilibili.com/video/BV1se4y1F7Ld



如果不加末尾的 &

如果使用 nohup 命令,在末尾不加 &,当使用 Ctrl + C 退出后,服务就关闭、停掉了。



如果不使用 nohup 命令,但在末尾加 &

如果不使用 nohup 命令,直接执行目标指令,在末尾加 &,使用 Ctrl + C 退出后检查,服务还在;

但是当当前用户退出终端之后再重新连接上服务器之后再看,服务已经关闭了。



总结

nohup 和末尾的 & 要一起用。

& 作用解释

  • 使用 & 后台运行程序,结果会输出到终端
  • 使用 Ctrl + C 会发送 SIGINT 信号,因为使用了 & 运行程序,所以免疫 SIGINT 信号,程序不受影响、继续运行
  • 但当关闭 session 时,会发出 SIGHUP 信号,程序并不免疫,所以程序就会关闭

nohup 的作用解释

  • 使用 nohup 运行程序:结果默认会输出到 nohup.out
  • 使用 Ctrl + C 发送 SIGINT 信号,程序不免疫,所以会关闭
  • 但是关闭 session 时会发送 SIGHUP 信号,所以程序是免疫的

所以一般要使用 nohup 和 & 配合来启动程序,同时免疫 SIGINT 和 SIGHUP 信号