Linux -- 进程间通信的五种方式
Linux 系统中,进程间通信(IPC)的五种主要方式如下:
- 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,需要通过fork创建。
# 命名管道
mkfifo mypipe
# 读取端
cat < mypipe
# 写入端
echo "Hello World" > mypipe
- 命名管道(FIFO):FIFO是一种文件类型,它把管道和文件结合起来,允许无关的进程通过一个文件通信。
# 创建命名管道
mkfifo myfifo
# 写入端
echo "Hello World" > myfifo
# 读取端
cat < myfifo
- 信号(Signal):信号是一种不带数据的通信方式,用于通知接收进程某个事件发生。
# 发送信号
kill -SIGINT `ps aux | grep 'process_name' | awk '{print $2}'`
- 消息队列(Message Queue):消息队列是消息的链接表,用于存放在消息的传递过程中,允许按照一定的规则接收和发送消息。
# 创建消息队列
ipcrm -Q <queue_id>
# 接收消息
msgrcv <queue_id>, <buffer>, <length>, <type>, <flags>
# 发送消息
msgsnd <queue_id>, <buffer>, <length>, <type>, <flags>
- 共享内存(Shared Memory):共享内存是最快的一种IPC,因为进程是直接对内存进行操作,不需要任何数据的拷贝。
# 创建共享内存
ipcrm -M <shm_id>
# 连接共享内存
shmat <shm_id>, <address>, <flag>
# 断开共享内存
shmdt <shm_id>
这些是基本的进程间通信方式,每种方式都有其特定的使用场景和优缺点。
评论已关闭