gpt4 book ai didi

macos - 启动产生新进程的流程

转载 作者:行者123 更新时间:2023-12-02 20:29:15 29 4
gpt4 key购买 nike

我正在研究 launchd 如何从 /Library/LaunchDaemons/ 下的 plist 文件或通过命令 launchctl load 加载其服务

到目前为止,我已经设法收集了一些不同的来源,并根据我的理解构建了以下模糊的图片:

服务加载时(launchctl load),进程 launchctl 向 launchd 发送适当的 XPC 消息,然后 launchd 被 fork 为新的在 xpcproxy 上下文中进行处理。这个通用进程正在等待来自 launchd 的另一个 XPC 调用,以根据 launchDaemon plst 运行其真实进程上下文。

这个解释听起来正确吗?也许有人可以帮助我使它更准确?

谢谢

最佳答案

这实际上有点复杂。内核由两部分组成,BSD和mach内核;后者负责内存管理和进程调度。

每个 mach 进程都有一个或多个 mach 任务(真正的任务端口权!)。当应用程序首次启动时,它只有一个权限,即引导端口,允许与 launchd 进行通信。请注意,任务端口权限是单向的,因此有权与 launchd 通信的启动进程必须授予 launchd 与其通信的权限。

当 launchd 收到 XPC 消息时,它会根据 Launch Daemon 采取什么操作。该消息可能针对的是使用可能正在运行也可能未运行的网络端口运行的服务。如果正在运行,它将所有参数从调用进程转发到正在运行的服务。如果没有运行,则可以通过先启动进程来按需提供服务。

更具体地说,您询问了launchctl load。由于 launchd 的源代码不再开源,因此下一个最佳资源是 Jonathan Levin 的逆向工程工作; Mac OS X and iOS Internals的作者最近,他在 *OS Internals 上自行出版了新书。 。

您会找到他关于 launchd 的幻灯片 here ,但可能对您更有用的是他的 launchctl 版本,jlaunchctl这是 open source .

最后,如果您想查看进程之间的 XPC 消息内容,请禁用 SIP 并使用 Jonathan 的宝贵的 XPoCe工具。

关于macos - 启动产生新进程的流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231968/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com