【问题标题】:Which PID listens on a given mach port哪个 PID 在给定的 mach 端口上侦听
【发布时间】:2022-05-12 21:02:49
【问题描述】:

我的应用程序接收 mach IPC 消息并为调用者返回答案。我有马赫呼叫者port(msgh_remote_port),我想知道呼叫者的PID。 我可以在 OSX 上通过 mach 端口找到 PID 来监听特定的 mach 端口吗?

【问题讨论】:

    标签: macos mach


    【解决方案1】:

    mach 端口不直接与进程关联,而是与任务关联。然后将该任务与 bsd 进程结构相关联。要查询任务的端口,您可以使用 mach_port_names 函数。要获取所有打开的 mach 端口,请遍历所有任务并使用上述功能。

    另一种方法是使用 procfs 文件系统。 procfs 文件系统是在 fuse 文件系统之上实现的,需要在系统上手动安装。这是一个开源解决方案。安装 procfs 文件系统后,您可以通过访问文件 /proc/proc-id/task/ports 来查询任务的端口。看看Link

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      在没有 kext 的情况下,您可以通过三种方式做到这一点:

      • launchctl 打印系统(或其他域)
      • lsmp -a(没有端口名称,只有 id)
      • procexp 所有端口 | grep the_service_name_you_want

        (procexp 是来自http://NewOSXBook.com/tools/procexp.html 的附加工具)

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 2011-02-19
        • 2016-04-20
        • 2019-01-03
        • 1970-01-01
        相关资源
        最近更新 更多