1.进程退出
1.1正常退出
- Main函数调用return
- 进程调用exit() --------标准c库
- 进程调用_exit()或者_ _Exit(),属于系统调用
- 进程最后一个线程返回
- 最后一个线程调用pthread_exit
1.2异常退出
-
调用abort
-
当进程收到某些信号时,如ctrl+C
-
最后一个线程对取消(cancellation)请求做出响应
2.父进程等待子进程退出
2.1原因
- 父进程等待子进程退出并收集子进程的退出状态回收子进程资源,获取子进程退出信息
- 如果子进程退出状态不被获取,则会变成僵尸进程
2.2 Wait函数
2.3 函数原型
pid_t wait(int *wstatus);
作用: 使用wait函数后会立刻让父进程阻塞,直到一个进程结束后获取其状态码为止。如果该父进程没有子进程则会立刻返回
status返回值:
- 非空:子进程退出状态放在它所指向的地址中。
- 空:不关心退出的状态
2.4 例子
int main()
{
pid_t retpid;
int cnt = 0;
retpid = vfork(); // 接收vfork的返回值
if (retpid > 0)
{
while (1)
{
wait(NULL);
printf("this is father pid = %d\n", getpid());
sleep(2);
printf