【问题标题】:OS X IPC get process-ID in COS X IPC 在 C 中获取进程 ID
【发布时间】:2015-11-24 14:40:04
【问题描述】:

是否有任何服务器-客户端之类的进程间通信方法允许:

  • 服务器可靠地获取已连接客户端的进程 ID
  • 任何连接到服务器的客户端应用程序
  • 在 C/C++ 中工作
  • 可选:也适用于 Linux

【问题讨论】:

  • 我不这么认为;作为握手的一部分,你不能让客户端通过网络连接告诉你吗?
  • 您可以尝试两种方式的连接:首先,您将客户端中的任务的端口权传输到服务器(在这种情况下,客户端必须将端口权发送到自己的任务端口) ,然后服务器将实际发送权插入到该任务中。这样你就可以在一定程度上知道哪个进程拥有端口权。
  • @K.Biermann Mach IPC。您知道要正确插入端口的任务,因为客户端给了您发送权限。你会使用mach_port_insert_right
  • 这个想法是你调用mach_task_self 来获取你的任务端口,然后向服务器发送一个发送权限,然后使用mach_port_insert_right 将与该任务相关的发送权限插入到任务中。
  • @K.Biermann 干杯!抱歉耽搁了,现实生活妨碍了。我只是将其发布为答案。

标签: c++ c macos ipc pid


【解决方案1】:

由于您的服务器以 root 权限运行,您可以使用task_for_pid() 和双向连接。首先,客户端将通过服务器上的某个特殊引导端口将其 pid 发送到服务器,然后服务器将通过 task_for_pid 将 pid 解析为任务端口,然后使用 mach_port_insert_right 将发送权限插入到新端口进入客户端。然后,新端口专供客户端使用,您知道客户端的安全级别。

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多