2017-06-25 62 views
1

我维持OSX的工具,揭示了从直接父选定过程的父母树的鼻祖(通常的launchd)。获取的情况下,过程中的“真正的”父进程产生的间接使用的launchd

但是,如果已检查的进程间接通过使用事件(例如双击捆绑软件图标)或使用命令open从bash运行进程从launchd间接产生,则此进程链可能会中断。在这些情况下,我希望相应地看到bashfinder

也许XPC消息层是答案,因为我认为这些事件是通过这一机制的launchd。但是,其他可用的OSX框架总是受欢迎的。

编辑:

我明白,如果一个进程分离本身运行时,我不能恢复它的PPID,但我的目标是要追踪的是启动进程创建调用者。

谢谢

+0

不能完全确定你在寻找什么,但如果一个进程分离本身,它以PID 1(INIT)作为其直接父.... –

+0

我明白,我不能当一个过程在生命中脱离时,不会发生。但也许有一种方法来追踪进程调用者,而它只是从双击事件中产生,通过追踪查找器和启动之间的通信 – Zohar81

回答

0

你看到的是正确的行为。

当用户从Finder中打开应用程序包,或者通过在终端中使用open命令时,Launch Services负责执行应用程序。

将应用程序引入到OS X/macOS时,根据捆绑软件标识符在捆绑软件的Info.plist文件中声明,它将在启动服务中注册。

当用户双击或在该终​​端使用open,发射服务接收该包标识符,并启动先前已注册的应用程序。

应该注意的是,如果应用程序包的标识符不是唯一的,则会发生问题。通过两个具有相同版本和应用程序标识符的应用程序包,启动服务将执行它注册的第一个应用程序,但它可能不是用户认为它们正在运行的那个应用程序!

相反,如果您使用终端在应用程序包中直接执行二进制文件,而不使用open,则其父文件将是终端使用的shell应用程序。例如: -

/Applications/Calculator.app/Contents/MacOS/Calculator 
+0

嗨,谢谢你回答我的问题。我知道这是正确的行为,但我不知道是否有任何方式能够追踪启动流程创建的实体,无论是“查找”双击事件还是“打开”命令。 – Zohar81

+0

在用户模式下,没有。如果你真的确定了,我希望你可以用内核扩展来做到这一点,但这远远超出了SO问题的答案。 – TheDarkKnight

+0

如果有必要,我愿意写一个kext,但我认为消息发送并不会通过内核,除非xpc正在通过mach消息。也许你可以给我一些从哪里开始的一般准则?非常感谢 – Zohar81

相关问题