如何让 start-stop-daemon 将子进程 ID 写入 pid 文件?

How can I get start-stop-daemon to write the child process ID to the pid file?

我正在编写一个 init.d 脚本来启动一个我用 C 编写的程序。该程序遵循一个非常标准的模板,它调用 fork() 来创建一个子进程,并且然后父进程几乎立即终止。我 运行 遇到的麻烦是 PID 文件将父进程 ID 写入其中,所以稍后当我调用 "stop" 它失败了,因为父进程早已结束,只有子进程是 运行.

目前我的启动脚本中有这个命令:

start-stop-daemon --start --background -m --oknodo --pidfile "$PIDFILE" --exec "$SCRIPT" || return 2

我承认我对所有这些都很陌生,所以我什至不完全确定所有这些标志的作用。这主要是我偶然发现的各种文章中的 copy/paste。无论如何,这似乎是一件相当普遍的事情。我怎样才能让它在 pid 文件中写入正确的(即子)进程 ID?

守护进程需要自己创建.pid 文件。因为它自己守护程序,当你改变你的启动pid时。

选项--pidfile 用于已创建的pid 文件。 start-stop-daemon 也有选项 --make-pidfile,但它只对不守护自己的程序有用。

-m, --make-pidfile ... Note: This feature may not work in all cases. Most notably when the program being executed forks from its main process.