进程:一个可并发执行的程序在一个数据集上的一次运行,即程序的一次运行过程。
进程与程序的关系:程序是进程的一个组成部分,是进程的执行文本;进程是程序的执行过程。
僵尸进程:进程主体结束,但是进程的PCB依旧存在,在多进程编程中,父进程未结束,但是子进程结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
进程有五种结束方式:
1.调用exit ()
2.调用_exit()
3.从main函数返回,return
4.调用abort() ,产生SIGABOUT信号 (异常退出)
5.由信号终止,ctrl+c SIGINT (异常退出))
子进程结束后,子进程的退出状态需要保存到PCB结构中(它只保留最小的一些内核数据结构),从而使父进程可以获取子进程的退出状态,以便及时处理僵尸进程。
进程真正结束的条件:1.进程主体退出;2,父进程可以获取子进程的退出状态以后,PCB释放。
处理僵尸进程的三种方式:
1、 如果父进程先退出,子进程(此时为孤儿进程)被init接管,子进程退出后init会回收其占用的相关资源。
2、 父进程直接调用wait 或 waitpid 函数。
Pid_t wait(int *status);
进程一旦调用wait函数,就立即阻塞自己