1

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

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

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

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

4

1 回答 1

1

守护进程需要自己创建 .pid 文件。由于它自己的守护进程,当您更改启动 pid 时。

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

-m, --make-pidfile ... 注意:此功能可能不适用于所有情况。最值得注意的是,当正在执行的程序从其主进程分叉时。

于 2017-03-31T09:16:22.767 回答