Linux - 使用第二个进程建立 IPC 的选项

Posted

技术标签:

【中文标题】Linux - 使用第二个进程建立 IPC 的选项【英文标题】:Linux - options to establish IPC with second process 【发布时间】:2014-07-26 20:35:08 【问题描述】:

我正在尝试研究我能找到的所有不同方法,以便 linux 机器上的进程在同一台机器上与第二个进程(不是子进程)建立 IPC。我确实发现socket 可以使用,因为我知道第二个进程正在侦听的文件系统上的路径。

是否可以通过其他方式与第二个进程进行 IPC 通信?我不希望第一个进程知道第二个进程的 pid/uid。该场景更倾向于与不同作者在同一台机器上与不受信任的进程进行通信,但仍然有一些信息,例如第二个进程中的套接字在哪里监听?

【问题讨论】:

寻找 shmat。这将非常有用。 【参考方案1】:

共享内存和套接字可用于互不相关的进程之间的 IPC 通信。管道可用于父进程和子进程之间的 IPC 通信。

共享内存是最快的进程间通信形式。在所有其他方法中,系统调用将数据从一个进程的内存区域复制到另一个进程。共享内存的缺点是,你需要实现同步方法来避免竞争条件。

Sockets 接口使进程之间能够以面向连接的方式通过网络和本地进行通信。 UNIX 域套接字使用已知文件路径提供本地 IPC。

【讨论】:

【参考方案2】:

可能的方式:

    共享内存(shmgetshmctlshmatshmdt) FIFO 队列又名命名管道 (mkfifo) 消息队列(msggetmsgsndmsgrcvmsgctl) 信号量 - 用于同步(semgetsemctlsemop

提示:

有用的命令:ipcsipcmkipcrm

【讨论】:

【参考方案3】:

此外,您可以使用 mmap POSIX 标准调用并指定标志 MAP_SHARED。这里https://www.cs.purdue.edu/homes/fahmy/cs503/mmap.txt你可以找到一个使用它的例子。

【讨论】:

以上是关于Linux - 使用第二个进程建立 IPC 的选项的主要内容,如果未能解决你的问题,请参考以下文章

可以比 IPC 或套接字更直接地在进程之间进行通信吗?

linux共享内存的控制释放

Qt 和 C/C++ 之间的 IPC

Android开发艺术-第二章 IPC 机制

多个相同进程之间的 IPC 通信

Android中的IPC进程通信方式第二篇