我已经编写了我的第一个守护进程并且它正常工作。然而,我所遵循的所有教程都略有不同,我担心我在守护进程中使用的步骤可以重新排序,但它仍然有用。
目的是让这个守护进程由init(我们在旧服务器上)管理,因此它将以root身份启动并需要删除权限。
到目前为止,我的订单是:
- 启动syslogger
- 在/ var / run中创建一个文件,该文件将成为pid锁文件。将文件权限更改为守护程序用户。这是在删除权限之前完成的,否则进程将无权访问/ var / run。
- 检查一个标志,看看该进程是否已被守护进程。这意味着如果我的守护进程函数因任何原因被调用两次,它将不会尝试生成另一个子进程。
- 分叉过程。检查错误并退出父进程。
- 删除root权限并成为守护程序用户。
- 尝试打开pid文件并获取锁定以确认该守护程序的其他实例已在运行。然后将当前进程ID写入pid文件。
- 获取子/守护进程的新会话。
- 设置umask
- 更改到根目录 - 我认为这是为了防止后台程序被守护进程无限期锁定而启动守护程序。
- 重新打开所有文件描述符并将它们发送到/ dev / null - 这意味着当分离进程时,标准流可以去某处。
- 为守护程序进程设置信号处理程序。
- 设置守护程序标志
醇>
我觉得通过步骤5到11可以按任何顺序完成。我对上述订单的部分推理是,我想在不再需要时立即删除root权限。
在某些示例中,我看到父进程在退出之前等待子进程发出信号表明其设置正常。我应该这样做吗?如果父项在子项拥有自己的会话并设置文件描述符之前退出,会发生什么?
我想我问,设置守护进程时事件的顺序应该是什么。