进程终止:
1.终止的场景:
正常退出:结果符合预期
正常退出:结果不符合预期
异常退出
2.退出方式:
(1)return :退出前会刷新缓冲区
(2)exit():退出前会刷新缓冲区(库函数)
(3)_exit():退出前不会刷新缓冲区(系统调用接口)
3.返回值:查看进程的返回值:echo $
进程等待:
1.pid_t wait(int *status); 阻塞函数
status:用于获取退出原因
返回值:退出的子进程的pid
2.pid_t waitpid(pid_t pid,int *status,int options); 该函数默认阻塞,但可以通过options来设置是否阻塞
pid:
-1: 等待任意子进程退出
>0: 等待指定子进程退出
status: 用于获取退出原因
options:
WNOHANG 将waitpid设置为非阻塞
返回值:-1 错误 0:没有子进程退出 >0:退出的子进程的pid
3.进程退出原因的获取:被保存在status变量中
通过自己移位运算操作来获取,或者通过以下方式:
WIFEXISTED(status):判断进程是否正常退出,正常退出返回true
WEXISTSTATUS(status) :在进程正常退出时,获取子进程退出码
所以只要在父进程中等待子进程退出就可以避免僵尸进程的产生。