一、进程通信
同一主机进程间通信:
1.1无名管道
当前系统默认64K大小(当管道满时,再写时按FIFO的方式存储,会发生写阻塞)
用于同一主机下,具有亲缘关系的进程间通信。
1.创建一个管道并打开 int pipe(int pipefd[2]);(pipefd[0],管道的读端,pipefd[1]管道的写端)
2.读管道 read();
3.写管道 write();
4.关闭管道 close();
5.删除管道 remove();
1.2有名管道
用于同一主机下,具有任意关系的进程间通信。
1.创建一个管道文件
mkfifo fifo(名为fifo的管道文件) int mkfifo(const char *pathname, mode_t mode);
a,b两个进程都创建了一个管道文件,目的是运行任意进程。
2.打开管道文件 open(“./fifo”,)//文件名、读写执行权限
3.读写 write/read()
4.关闭 close()
5.删除管道文件 remove(“路径”);
读关闭只写:管道破裂为防止这种情况,读写端必须同时打开。
1.3信号
信号:进程间的异步通知机制(软中断)
信号类型:kill -l
kill(pid,SIGUSR1)
2.Ctrl+C 3.Ctrl+\ 9.强制结束11.段错误 13.管道破裂 14.为进程定时,到达时间进程结束 17.子进程结束发给父进程 18.让停止态继续执行 19,让运行态停止 20.让进程暂停转后台Ctrl+Z
10/12自定义信号 9/19管理员信号 (无法被捕获和忽略)
1.3.2.接受信号
1.3.2.1.发送信号:
int kill(pid_t pid, int sig);功能:给指定进程发送信号参数:
pid:进程pid号Sig:发送的信号编号
1.3.2.2 使用注册信号
1.1注册信号处理函数signal
1.2忽略:不处理
1.3捕获 : 按照用户自定义方式处理。
1.4缺省:按信号默认方式处理(若不注册)
sighandler_t signal(int signum, sighandler_t handler); 功能:信号的接收方,注册一个信号处理函数 参数:
signnum:几号信号
handler:typede void (* sighandler_t handler)(捕获方式处理,自定义)
SIG_IGN忽略方式处理
SIG_DFL默认方式处理(缺省)
返回值:
成功:函数地址
失败:SIG_ERR
4.alarm
unsiqned int alarm(unsiqned int seconds):功能:间隔seconds秒后给调用进程发送一个SIGALRM信号
参数:
seconds:秒数返回值:
成功返回上次设定剩余的时间
上次未设定则返回0
5.int pause(void)
功能:挂起当前进程(可中断睡眠状态)
可以通过发送信号的方式,唤醒pause挂起的进程,信号必须被捕获。
1.4共享队列
1.5消息队列
1.6信号灯
不同主机进程间通信: