Linux下,进程间通信有多种方式,使用信号进行通信,是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达。所以 是一种比较灵活的方式。
信号的种类,发送和注册的系统调用,以及收到信号后的几种处理方式(捕捉、忽略、默认处理动作),还有信号从诞生到注销的处理流程,可以参考 Linux异步之信号(signal)机制分析 。
使用基本的系统调用(kill和signal)来实现同一用户进程间的通信,先看一段代码:
#include"stdio.h"
#include"unistd.h"
#include"signal.h"
#include"stdlib.h"
#include"sys/wait.h"
int wait_mark;
void waiting(){
while(wait_mark!=0);
}
void stop(){
wait_mark=0;
}
int main()
{
int p1,p2;
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
printf("parent\n");
kill(p1,16