Process 在Mac OS中的进程之间共享未命名信号量

Process 在Mac OS中的进程之间共享未命名信号量,process,semaphore,mach,Process,Semaphore,Mach,我试图在两个进程之间共享一个未命名的马赫信号量。 我可以创建一个并在同一过程中等待它 semaphore_t semaphore = 0; mach_error_t err = semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0); ... semaphore_wait(semaphore); 但是我想把它发送到另一个进程(我只有mach_port_t),然后让它发信号给我自己的进程 我已经试过这样的方法

我试图在两个进程之间共享一个未命名的马赫信号量。 我可以创建一个并在同一过程中等待它

semaphore_t semaphore = 0;
mach_error_t err = semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0);
...
semaphore_wait(semaphore);
但是我想把它发送到另一个进程(我只有mach_port_t),然后让它发信号给我自己的进程

我已经试过这样的方法:

mach_port_allocate(target, MACH_PORT_RIGHT_RECEIVE, targetSemaphore)
mach_port_insert_right(target, targetSemaphore, semaphore, MACH_MSG_TYPE_COPY_SEND)
这将产生一个错误,因为目标进程中已经存在端口名,或者如果我不在目标进程中分配端口名,则会出现“未知故障”

甚至:

mach_msg_send
mach_msg_receive
但我甚至无法从一个进程到另一个进程发送任何内容

我做错了什么,甚至有可能吗?

我发现了:

mach_port_extract_right
是正确的方法,而不是:

mach_port_insert_right
然后这样做,将完成以下工作:

semaphore_t semaphore = 0;
mach_error_t err = semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0);

err = mach_port_allocate(target, MACH_PORT_RIGHT_RECEIVE, &receivePort);

mach_msg_type_name_t type;
semaphore_t sendPort = 0;
err = mach_port_extract_right(target, receivePort, MACH_MSG_TYPE_MAKE_SEND, &sendPort, &type);

//Send semaphore using port
mach_msg_send(&msg.header);