【问题标题】:execve from a Mac OS X launchd daemon从 Mac OS X 启动守护进程执行
【发布时间】:2011-07-12 17:24:44
【问题描述】:

是否可以从launchd 守护进程中使用execve?我想成为守护进程的进程使用 fork() 后跟 execve 启动了几个子进程,但documentation for creating launchd daemons 指出“调用 fork 后跟 exec”是不行的。这是否意味着我不能从守护进程创建子进程?

【问题讨论】:

    标签: c++ macos daemon launchd execve


    【解决方案1】:

    AFAIK,你可以 fork 和 exec 就好了。关键点是这一点:“你不能分叉你的进程并让父进程退出。” 事情是,launchd “监视”你的服务。如果您的服务退出,它会重新启动。这意味着它也可能不会守护进程(守护进程是指经典的生成一个新进程,创建一个新进程组,退出父进程,子进程继续存在方案)。

    我想你应该确保在退出主进程之前杀死/退出你的子进程,以免乱扔环境。

    【讨论】: