我正在对Mac OS X上可用的不同IPC机制(管道,插座,System V IPC等)进行比较,我想看看Mach端口如何与更高级别的替代品进行比较.但是,我遇到了一个非常基本的问题:跨进程获取端口的发送权限(特别是跨父进程和子进程).
与文件描述符不同,端口通常不会转移到分叉进程.这意味着必须建立一些其他的转移方式.关于这个问题的唯一相关页面就是这个,他们在更新中声明他们的方法不再有效,并且从未得到保证,尽管这种方法是Apple工程师在2009年提出的.(这意味着更换引导端口,现在这样做会破坏XPC.)他们建议的替换使用已弃用的功能,因此这不是一个非常有吸引力的解决方案.
此外,我喜欢旧解决方案的一件事是端口在使用它的进程之间保持相当私密.没有必要广播端口的存在,就像管道(来自pipe
呼叫)工作一旦分叉.(如果有另一个解决方案,我可能会忍受它,但它有点烦人.)
那么,如何将发送权从父进程传递到Mach进程到子进程?
您可能会尝试的一件事(尽管这是一个严重的黑客行为)是劫持异常端口作为继承机制。将自定义端口设置为父级中的异常端口,分叉子级,让子级从其异常端口获取自定义端口,将其任务端口发送到父级,父级重置其异常端口,重置子级的异常端口,以及然后两人通过沟通渠道从那里开始。看task_set_exception_ports()
。
归档时间: |
|
查看次数: |
1458 次 |
最近记录: |