从Mac OS X的launchd守护程序中执行execve

4

在launchd守护进程中是否可以使用execve?我想将我的进程变成一个守护进程,使用fork()然后是execve启动多个子进程,但创建launchd守护进程的文档指出,“调用fork后跟exec”不行。这是否意味着我不能从守护进程创建子进程?

1个回答

5
据我所知,您可以很好地进行fork和exec。关键点在于:“您不能fork您的进程并使父进程退出。”问题是,launchd会“监视”您的服务。如果您的服务退出,它将被重新启动。这意味着它也可能不会daemonize(通过daemonize,我指的是经典的生成新进程,创建新进程组,退出父进程,子进程继续运行方案)。
我想您应该确保在退出主进程之前杀死/退出您的子进程,以免污染环境。

我正在移植一个跨平台应用程序时遇到了这个问题。在 plist 中指定的可执行文件由于使用了标准的 fork、exec、exit 父进程方式而启动了多次,因此我最终得到了无限数量的该可执行文件实例,如果不停止,甚至会冻结或崩溃操作系统。 - Bemipefe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接