Zoh*_*r81 4 c macos xpc launchd
我正在维护一个 OSX 工具,它显示选定进程的父树,从直接父进程到其最早的祖先(通常是 launchd)。
但是,如果检查的进程是使用诸如双击捆绑包图标之类的事件从 launchd 间接生成的,或者使用 command 从 bash 运行进程,则该进程链可能会中断open。在这些情况下,我希望看到其中一个bash或finder相应的。
也许 XPC 消息传递层就是答案,因为我假设这些事件通过此机制传递到 launchd。然而,其他可用的 OSX 框架总是受欢迎的。
编辑:
我知道,如果一个进程在运行时自行分离,我无法恢复它的 ppid,但我的目标是跟踪启动进程创建的调用者。
谢谢
小智 8
此功能未记录。它可能会在任何操作系统更新时中断。
typedef pid_t (*pidResolver)(pid_t pid);
pidResolver resolver = dlsym(RTLD_NEXT, "responsibility_get_pid_responsible_for_pid");
pid_t trueParentPid = resolver(pid);
Run Code Online (Sandbox Code Playgroud)
a) 这个方法是私有的
b) 需要root权限
例如:如果您启动 Safari.app,还会创建一个名为“Safari Networking”的新进程。如果您在活动监视器中检查它,您只会看到 ppid 为 1。
上面的代码片段将返回 Safari 进程的 pid。正如在查看“所有进程,层次结构”时所看到的,其中“Safari Networking”被分组在“Safari”下。