子进程结束时由父进程回收,
情况一:如果父进程比子进程先结束,则子进程变成孤儿进程由init进程回收。
情况二:如果子进程比父进程先结束,如父进程没有及时回收则出现僵尸进程。
1、进程回收-wait函数
#include <unistd.h>
pid_t wait(int *status);
- 成功时返回回收的子进程的进程号;失败时返回EOF;
- 若子进程没有结束,父进程一直阻塞;直到子进程结束,父进程回收成功返回为止。
- 若有多个子进程,哪个先结束就先回收;如果创建三个子进程,就要调用三个wait来执行。
- status:指定保存子进程返回值和结束方式的地址
- status为NULL表示直接释放子进程PCB,不接收返回值
int status;
pid_t pid;if((pid = fork()) < 0){perror("fork");exit(-1);
}
else if(pid == 0)
{sleep(1); exit(2);//其中低 8 位是有效的,高位可能会被系统解释
}
else{wait(&status); printf("%x\n",status); //返回子进程的返回值和结束方式,16进制打印出来。
}
进程返回值和结束方式:
- 子进程通过exit/_exit()/return 返回某个值(0-255&#