我正在编写一个init.d脚本来启动我用C编写的程序。该程序遵循一个非常标准的模板,它调用fork()
来创建子进程,并且然后父进程几乎立即终止。我遇到的麻烦是PID文件获取写入它的父进程ID,所以稍后当我调用" stop"它失败了,因为父母已经很久才结束,只有孩子正在跑步。
目前我在启动脚本中有这个命令:
start-stop-daemon --start --background -m --oknodo --pidfile "$PIDFILE" --exec "$SCRIPT" || return 2
我承认我对这一切都很陌生,所以我甚至都不确定这些旗帜的作用。这主要是我偶然发现的各种文章的复制/粘贴。无论如何,这似乎是一件相当普遍的事情。如何让它在pid文件中写入正确的(即子)进程ID?
答案 0 :(得分:0)
守护进程需要自己创建.pid文件。因为它自己的守护程序,当你改变你的开始pid。
选项--pidfile
用于已创建的pid文件。 start-stop-daemon也有选项--make-pidfile
,但它只适用于没有守护自己的程序。
-m, - make-pidfile ... 注意:此功能可能无法在所有情况下使用。最值得注意的是,正在执行的程序从其主进程中分叉。
Here您可以找到如何在守护程序中创建pid文件的示例。