Linux下进程间通信技术总结(linux下进程通信方式)

Linux 下进程间通信技术总结

Linux 是一个功能强大,可以做成多种应用形式的受欢迎的操作系统,使用它可以创建多种服务,并利用这些服务在网络上进行通信。进程间通信(IPC)是实现这种进程间协作而实现的机制,系统中的参与进程可以通过这种机制,实现数据共享与交换,完成各自的任务。

Linux 下有多种进程间通信技术,如管道、命名管道、信号量、消息队列、共享内存和信号这六种。

(1)管道:它是最基本的进程间通信技术,分为无名管道和有名管道两种;无名管道是父子进程之间的通信,用于父进程与子进程之间的单向(管道的一端充当输入,另一端充当输出)或双向(双端都可以充当输入和输出)通信,有名管道是多个进程之间通信,需要利用文件系统,只能实现单向通信。

(2)命名管道:利用文件系统,实现管道通信的一种方式,但在进程间可以共享该管道文件,通信信息也可以保存,因此使用命名管道可以实现多个进程间的双向通信。可以用以下代码创建一个命名管道:

// 创建文件,文件作为通信的管道
if(mkfifo("my_fifo", 0644)
cout
exit(-1);
}

(3)信号量:利用共享内存,实现资源限制和访问锁定的技术方式,包括sysv信号量、posix信号量等。使用以下代码可以创建一个信号量:

// 创建信号量
// sem_t为信号量指针,p_sem为信号量地址
sem_t *p_sem = sem_open("sema", O_CREAT, 0644, 0);

(4)消息队列:是基于共享内存的进程通信方式,可以实现各个进程间的同步与异步,消息类型、优先级等可以自定义。以下代码可以创建一个消息队列:

// 创建消息队列
int msg_id = msgget(IPC_PRIVATE, IPC_CREAT|0644);

(5)共享内存:可以实现多个进程之间大量数据的共享,并且可以实现抢占式的数据交换,使用效率更高,但需要解决进程间数据冲突问题,可以通过信号量等锁机制来解决。用以下代码可以创建一个共享内存:

// 创建共享内存 
// 可使用 ipcs -m 查看共享内存信息
// key 唯一标识符 size 共享内存的大小
// 共享内存标识符将保存在 shmid 中
int shmid = shmget(key, size, IPC_CREAT|0644);

(6)信号:用于进程间的通信,信号强制进程或线程执行某种操作;用户可以为信号定义信号处理函数,以做出准确的具体动作,能够有效处理传入信号。可以用以下代码实现发送信号:

// 向指定进程发送信号
// pid 为接收信号的进程ID
// signnum 为信号号码
int kill(pid, signum);

本文总结了 Linux 下六种进程


数据运维技术 » Linux下进程间通信技术总结(linux下进程通信方式)