进程大概枝杈【B篇】进程间通信
{个人整理}
六、进程间通信
<1>通信(communication)进程间传送数据,进程间,控制信息交换称为低级,大批量数据的交换称为高级。
<2>进程通信的类型
1* 共享存储系统
2* 消息传递系统
直接通信方式:消息缓冲队列
间接通信方式:信箱
3* 管道通信系统
连接一个读进程和一个写进程,以字符流方式将大量数据送入管道。
<3>消息缓冲队列通信机制
》简介:公用缓冲区 条件:①.消息队列只服务唯一进程写消息
②.发送进程→申请→区队→接收进程
》消息缓冲队列通信机制中的而数据结构
⑴.消息缓冲区(Message buffer)
⑵.PCB有关进程通信的数据项
Mq指针 mutex互斥信号量 sm消息队列
=== === === === ==== ==== ==== ==== ==== === ==== ==== ==== ==== ==== =====
Linux上的进程间通信{个人整理}
Linux程序和进程
进程ID,
一、上帝进程init进程,id=1,自举过程结束时由内核调用。
二、一些获取进程标识的函数
Pid_t getpid(void)
Pid_t getppid(void)
三、fork函数,父进程创建子进程
子进程一次性继承
Vfork函数父进程创建子进程
子进程有选择实用继承
四、exec函数
fork创建进程后,子进程往往要调用一种exec函数以执行另一个程序
exec函数族
l表示list:用链表调用程序
V表示vector:用字符串数组调用程序
五、进程通信的目的
①.数据传输
②.共享数据
③.通知事件
④.资源共享
⑤.进程控制
六、Linux使用进程通信的方式
⑴.管道(pipe)和有名管道(FIFO)
⑵.信号(signal)
⑶.消息队列
⑷.共享内存
⑸.信号量
⑹.套接字(socket)
七、信号通信
# 信号是软件中断,它用于一个或多个进程间传递异步信号
# 内核为进程生产信号,来响应不同时间,这些时间就是信号源
# Linux中的信号SIGxxx SIGUP SIGKILL SIGINT
# 信号三种处理方式:①忽略信号 ②捕捉信号 ③执行系统默认动作
# 缺省动作,当进程没有给这个信号制定处理程序时,内核对信号的处理
△信号发送与捕捉
Kill()不仅可以中止进程,也可以向进程发送其他信号
Raise()函数运行向进程本身发送信号
△信号集函数组signal()信号捕捉处理函数(软中断)
△信号操作一般流程
定义信号集==》设置信号屏蔽位==》定义信号处理函数==》测试信号
八、共享内存
一个进程向共享内存写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。
实现步骤:(1)创建共享内存shmget();
(2)映射共享内存shmat();
shmid共享内存ID号 shmadd地址指针 shmdt()进程脱离共享内存
九、消息队列Message【报文队列】
1.概念:消息的一个链表,具有一定的FIFO特性,但实现消息的随即查询
2.消息队列的实现:①msgget创建打开一个消息队列
②msgsnd向队尾添加消息
③msgrcv读取
④msgctl控制
qid 队列id号
原文地址:http://yuan606.blog.51cto.com/11122628/1761244