我如何知道谁在macOS上调用该进程?
macOS上一个身份不明的进程会定期在“我的下载”文件夹中创建一个空临时文件,但以后不会将其删除 我设法找出了直接的罪魁祸首是我如何知道谁在macOS上调用该进程?,macos,lldb,Macos,Lldb,macOS上一个身份不明的进程会定期在“我的下载”文件夹中创建一个空临时文件,但以后不会将其删除 我设法找出了直接的罪魁祸首是mktemp,但我想知道哪个进程调用它 我想我可以在mktemp启动时使用$lldb进程attach-name mktemp-watifor来连接到mktemp,但不知道如何知道是谁首先调用了它 有没有任何解决方案,不管是否有lldb知道它?这实际上比你想象的要复杂一些 通过运行ps-jthrough-Terminal,您可以在macOS上轻松找到给定进程的父进程。父pi
mktemp
,但我想知道哪个进程调用它
我想我可以在mktemp启动时使用$lldb
进程attach-name mktemp-watifor
来连接到mktemp,但不知道如何知道是谁首先调用了它
有没有任何解决方案,不管是否有lldb知道它?这实际上比你想象的要复杂一些 通过运行
ps-j
through-Terminal,您可以在macOS上轻松找到给定进程的父进程。父pid是输出中的第三列。或“活动监视器”具有以图形方式显示这些关系的分层显示
lldb在附加时打印它所附加到的进程的pid,或者您可以在lldb命令的输出中找到它。所以这很容易找到
然而,由于技术原因,当调试器附加到进程时,该进程会被内核“重新分配”给调试器。因此,如果您询问在lldb下运行的进程其父进程是谁,答案总是“debugserver”-这是lldb的调试器存根。而且要想知道最初的父母是什么也不容易
我让它工作,虽然这是一个有点黑客。您希望挂起正在调试的进程,使其不会在您身上退出,然后从中分离,使其重新租回真正的父进程。因此:
ps-j
,找到您要查找的进程,它将是原始父进程如果需要重新运行该进程,请再次使用lldb连接到该进程,并使用与上面调用task\u suspend相同的参数调用task\u resume。感谢您提供了非常详细的答案!知道我如何为lldb提供mach.h的路径吗?当前正在运行
expr(void)task\u suspend((void*)mach\u task\u self())
抱怨mach\u task\u self
和task\u suspend
作为未声明的标识符