Unix 进程间通信

Unix 进程间通信,unix,ipc,Unix,Ipc,我有两个进程,A和B。B是一个执行某些功能的进程。流程A是控制B的流程。即流程A通过向流程B提供数据(控制和功能)来指示流程B 我在B中有一个专用于IPC的线程,该线程所做的只是从进程a获取指令,而其他正在运行的线程则对已经存在的数据执行它们必须执行的任何操作 我想到了使用shmat的管道和共享内存。但是我不满意,我想要这样的东西,每当进程A向B写入消息时,B中的ipc线程才应该被唤醒。。关于如何实现这一点,你有什么想法吗?具体取决于你需要什么样的灵活性以及谁在使用什么管道,但这应该是可行的:让

我有两个进程,A和B。B是一个执行某些功能的进程。流程A是控制B的流程。即流程A通过向流程B提供数据(控制和功能)来指示流程B

我在B中有一个专用于IPC的线程,该线程所做的只是从进程a获取指令,而其他正在运行的线程则对已经存在的数据执行它们必须执行的任何操作


我想到了使用shmat的管道和共享内存。但是我不满意,我想要这样的东西,每当进程A向B写入消息时,B中的ipc线程才应该被唤醒。。关于如何实现这一点,你有什么想法吗?

具体取决于你需要什么样的灵活性以及谁在使用什么管道,但这应该是可行的:让进程B的IPC线程在管道上选择可读性。当进程A写入管道时,进程B的IPC线程将被唤醒。

我找到了解决方案。我让其中一个线程打开管道的一端进行读取,执行实际读取并关闭它。这在一个无限循环中进行

想要写入它的进程只有在需要写入和关闭它时才会打开它,并最终结束


事实上,这种设置也避免了同步问题。但我不知道它的后果是什么,尽管是表演

但它的问题是,它还使写入过程(A)等待读取过程打开管道进行读取。管道缓冲区已满后,这是真的。但是,如果您不想丢失任何数据,则必须等待读卡器准备就绪。如果您不关心数据丢失,请使管道不阻塞。你可以把另一个过程放在管道中间作为无界缓冲器。