从 Mac OS X launchd 守护进程执行 execve

发布于 2024-10-21 08:55:19 字数 496 浏览 3 评论 0原文

是否可以使用 execve 来自 launchd 守护进程?我想将其制作为守护进程的进程使用 fork() 启动几个子进程,然后使用 execve,但是 创建 launchd 守护进程的文档指出“调用 fork 后调用 exec”是不行的。这是否意味着我无法从守护进程创建子进程?

Is it possible to use execve from a launchd daemon? My process that I would like to make into a daemon launches several child processes using fork() followed by execve, but the documentation for creating launchd daemons states that "calling fork followed by exec" is not ok. Does this mean that I cannot create child processes from a daemon?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尬尬 2024-10-28 08:55:19

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

我想你应该确保在退出主进程之前杀死/退出你的子进程,只是为了不乱扔环境。

AFAIK, you can fork and exec just fine. The critical point is this one: "You must not fork your process and have the parent process exit." Thing is, launchd "watches over" your service. If your service exits, it gets restarted. That means it may not daemonize, either (with daemonize I mean the classical spawn a new process, create a new process group, exit parent process, subprocess lives on scheme).

I guess you should make sure to kill/quit your subprocesses before you exit the main process, just to not litter the environment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文