为什么我们要守护进程?

les*_*urp 9 daemon rc

我已经阅读并了解您如何创建守护进程,但是从我阅读的所有内容中,我从未真正理解为什么需要这样做。

我读过我们使用 fork-setid-fork 来避免获得终端控制权的过程,但这意味着什么?如果我在后台使用 & 启动一个程序(例如 './script &' ),是什么让这个进程的执行与我正常运行一个将自身变成守护进程的程序不同?

这是否仅仅意味着如果我注销后台进程将停止并且守护程序将继续运行?我真的很难理解“获得终端控制权”这件事。

这困扰我的原因是因为我正在机器人上处理嵌入式 RPi,因此我需要让程序在启动时启动。目前我只是用这样的命令从 rc.local 启动它们su user -c 'python /home/user/launcher.py &' &。我在启动时启动程序从来没有遇到过任何问题(我ps -e什至可以看到通过SSH 连接到 RPi 时使用的过程),但我想知道是否有任何风险/这是否是不好的做法。

Tho*_*key 6

这不仅仅是一个问题,每个问题都有很长的答案。简要地

  • 如果我在后台使用 & 启动一个程序(例如 './script &' ),是什么让这个进程的执行与我正常运行一个将自身变成守护进程的程序不同?

    在后台运行一个程序,它不再由终端直接控制(你不能简单地控制^C它),但它仍然可以写入终端并干扰你的工作。通常,守护进程会将自己与终端分开(除了分叉),其输出/错误将被重定向到文件。

  • 这是否仅仅意味着如果我注销后台进程将停止并且守护程序将继续运行?

    后台进程可以被保护,nohup但除非它的输出被重定向,否则关闭终端将阻止它写入,产生一个可能会阻止它的错误。

  • 我想知道是否有任何风险/这是否是不好的做法。

    除了跟踪程序的输出(和错误消息)的问题外,如果它碰巧死掉,还有重新启动它的问题。服务脚本适合系统上其他服务的设计方式,提供一种或多/少的标准方式来控制守护程序。