Linux进程通信
进程间通信不可能发生在用户空间,必须通过内核对象进行。
基础知识
1)linux 通过inode 来区分不同的文件
2)父子进程的不同点:
0) fork函数详解 http://blog.csdn.net/jason314/article/details/5640969
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
一、同一内核中进程通信方式
1.管道
1)pipe 匿名管道
匿名管道是单向队列,管道写是入列,读是出列。读写阻塞。
只能用于父子进程间通信。因为匿名管道在用户空间没有名称,父子进程完全一样,其他进程则无法访问。
2)mkfifo 命名管道
命名管道是单向队列。
没有血缘关系的进程通过相同的名称去访问内核中的管道,从而实现通信
2.信号
信号是已经存在于内核空间对象,有64种信号。用户空间不能发送信号。
如何使用:
目前进程ID(PID),信号ID(SID)
信号的发送:
发送给所有进程:
kill
发送给本进程:
raise
alarm: 只能发送闹钟信号
pause
sleep
信号的处理:
signal: 设置进程自己信号处理响应
浙公网安备 33010602011771号