1 学习目标
- 了解进程间通信的常用方式
- 掌握使用管道实现进程间通信的方法
- 掌握使用消息队列实现进程间通信的方法
- 掌握使用信号量实现进程间通信的方法
- 掌握使用共享内存实现进程间通信的方法
2 管道 pipe()
本次课程主要学习了管道与进程之间的关系
3 exec函数族
exec:一个进程调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序代码,废弃原有数据段和堆栈段,并为新程序分配新数据段与堆栈段
exec函数族包含六个函数:
4 进程退出
- status:表示进程的退出状态,0表示正常退出,非0表示异常退出,一般用-1或1表示;
- 为了可读性,标准C定义了两个宏:EXIT_SUCCESS和EXIT_FAILURE
什么叫“孤儿进程”?
答:父进程负责回收子进程,如果父进程在子进程退出之前退出,子进程就会变成孤儿进程,此时init进程将代替父进程完成子进程的回收工作(init是优先级最高的进程)。
什么是“僵尸进程”?
答:调用exit函数后,该进程不会马上消失,而是留下一个称为僵尸进程的数据结构。它几乎放弃进程退出前占用的所有内存,既没有可执行代码也不能被调度,只是在进程列表中保留一个位置,记载进程的退出状态等信息供父进程回收。若父进程没有回收子进程的代码,子进程将会一直处于僵尸态。
5 进程同步
1) wait函数
若wait函数的参数不为空,可以获取子进程的退出状态,退出状态存放在参数status的低八位中。
2)waitpid函数
可以应对 wait函数面临的缺点。可以等待指定的子进程,也可以在父进程不阻塞的情况下获取子进程的状态。