一、本机间进程通信
1、管道通信
如果读端关闭,写端继续向管道内写数据将会导致管道破裂,内核将会发送信号SIGPIPE到进程中,该信号的默认处理方式为结束进程;
如果写端关闭,读端继续从管道中读取数据将会读不到任何数据;
管道文件的大小固定为64K,如果写入数据超过64K并且没有对数据进行读操作,那后续写入动作将会被阻塞。
半双工通信,可读可写,不可以同时读写。
1.1、无名管道(用于亲缘间进程通信)
有固定的读端和写端;
不会在磁盘系统中存在,是临时文件。
函数:pipe
1.2、有名管道
管道可用于读写;
在磁盘系统中存在。
函数:mkfifo
2、信号通信
异步通信方式,在软件层次上模拟中断的产生。
对信号的处理方式:
1、默认处理方式
2、忽略信号
3、捕获信号
常用信号:
1、SIGINT(Ctrl+c):该信号的默认处理方式为结束进程
2、SIGKILL:该信号的默认处理方式为结束进程
3、SIGCHLD:该信号的默认处理方式为忽略,子进程状态改变
4、SIGCONT:该信号的默认处理方式为将停止态的进程重新恢复到运行态
5、SIGSTOP:该信号的默认处理方式为将进程直接进入停止态
6、SIGTSTP(Ctrl+z):该信号的默认处理方式为将进程进入停止态
其中SIGKILL、SIGSTOP不可以被忽略、不可以被阻塞、不可以被捕获,只能采用默认处理方式。
函数:Kill、raise、alarm、pause、signal
IPC对象机制
3、共享内存
多个进程共享同一片内存空间,不需要进行数据的拷贝,效率最高;但存在资源竞争问题。
函数:shmget(搭配ftok)、shmat、shmdt、shmctl
4、消息队列
先进先出,保证信息的有序性。
函数:msgget(搭配ftok)、msgsnd、msgrcv、msgctl
5、信号灯集
信号灯也叫信号量,是不同进程间或一个给定进程内部不同线程间同步的机制。
信号灯集为信号量的集合,实现同步、互斥机制,配合共享内存使用,解决资源竞争问题。
函数:semget、semctl、semop
二、跨主机通信
6、套接字通信