【发布时间】:2022-05-12 21:02:49
【问题描述】:
我的应用程序接收 mach IPC 消息并为调用者返回答案。我有马赫呼叫者port(msgh_remote_port),我想知道呼叫者的PID。
我可以在 OSX 上通过 mach 端口找到 PID 来监听特定的 mach 端口吗?
【问题讨论】:
我的应用程序接收 mach IPC 消息并为调用者返回答案。我有马赫呼叫者port(msgh_remote_port),我想知道呼叫者的PID。
我可以在 OSX 上通过 mach 端口找到 PID 来监听特定的 mach 端口吗?
【问题讨论】:
mach 端口不直接与进程关联,而是与任务关联。然后将该任务与 bsd 进程结构相关联。要查询任务的端口,您可以使用 mach_port_names 函数。要获取所有打开的 mach 端口,请遍历所有任务并使用上述功能。
另一种方法是使用 procfs 文件系统。 procfs 文件系统是在 fuse 文件系统之上实现的,需要在系统上手动安装。这是一个开源解决方案。安装 procfs 文件系统后,您可以通过访问文件 /proc/proc-id/task/ports 来查询任务的端口。看看Link。
【讨论】:
在没有 kext 的情况下,您可以通过三种方式做到这一点:
procexp 所有端口 | grep the_service_name_you_want
(procexp 是来自http://NewOSXBook.com/tools/procexp.html 的附加工具)
【讨论】: