一个进程正常退出应该遵循以下步骤:
- 子进程调用exit()函数退出进程
- 父进程调用wait函数获取子进程的退出状态,并且把子进程占用的进程控制块销毁掉
僵尸进程
子进程调用了exit函数,但是父进程没有调用wait函数,没有为子进程处理“身后事”。子进程死掉了但是父进程不知道,子进程变成僵尸进程
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t result = 0;
result = fork();
if (result < 0)
{
printf("fork error!!\r\n");
exit(1);
}
else if(result == 0)
{
printf("son procss quit.\r\n");
exit(0);
}
else
{
while (1);
}
return 0;
}
因为有死循环,必须转到后台运行,不能影响终端。
托孤进程
子进程还没有退出,父进程先退出了,子进程变成孤儿,了Linux系统会把子进程托付给1号进程(init进程)