wait函数族
1、wait函数:将当前进程挂起,等待信号来临,再继续运行
用来等待子进程的结束
pid_t wait(int *wstatus);
WEXITSTATUS:宏定义:返回子进程的退出状态
2、waitpid:它可以指定等待的进程号
pid_t waitpid(pid_t pid,int *wstatus,int options);
僵尸进程
1、zombie
3424 2423 0 15:32 pts/0 00:00:00 [a.out]< defunct >
产生的原因:当进程走完自己的生命周期之后,会执行自己的系统调用exit(9)函数,然后内存被释放,没有执行代码。但是在进程表里面仍留下进程信息(pid,退出信息),直到父进程将他们回收
如果子进程先结束而父进程后结束,即子进程结束后,父进程还在继续运行但是并未调用wait/waitpid那子进程就会成为僵尸进程。
僵尸进程应该尽量避免!!!!!
避免僵尸进程的方法:wait函数族
进程间的通讯方式(IPC)方式
管道:有名管道和无名管道
消息队列
信号量
共享内存
套接字
进程间通信的目的:
1、数据传输:一个数据决定另一进程,发送数据在几个字节到几兆字节之间
2、共享数据:多个进程共享一个数据,如果一个进程对共享数据修改,那么别的进程应该第一时间看到
3、通知事件:一个进程需要向另一个或一组进程进行发送消息,通知它(它们)发生了某种事件(如进程终止时通知父进程)
4、资源共享:多个进程之间共享同样的资源。为做到这一点,需要内核提供锁和同步机制
5、进程控制:
管道通信:无名管道:一端写,一端读。
管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立两个管道
int pipe()