子进程结束但是,内存没有完全释放就会编程僵尸进程;

#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(int argc, char * argv[])
{
pid_t pid;
pid = fork();;
if(pid < 0)
{
perror("fork error!");
}
else if(pid == 0)
{// child
printf("pid : %d, ppid : %d\n", getpid(), getppid());
//子进程结束将成为僵尸进程
exit(0);
}
while(1)
{
sleep(1);
}
exit(0);
exit(1);
}
测试:
运行程序,可以看到子进程的pid是16487,父进程的id是16486;
andrew@andrew-Thurley:~/work/apue.2e$ ./a.out
pid : 16487, ppid : 16486
打开另一端口使用ps -aux查看进程状态:
andrew@andrew-Thurley:~$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
andrew 16486 0.0 0.0 4220 640 pts/21 S+ 11:27 0:00 ./a.out
andrew 16487 0.0 0.0 0 0 pts/21 Z+ 11:27 0:00 [a.out] <defunc
可以看到子进程16487的进程状态是 Z+ 也就是处于僵尸状态 <defunc 也说明处于僵尸状态
父进程的进程状态是 S+ 数处于可中断等待状态,若是D就是不可中断等待状态,可中断就是可以接受结束信号结束进程,如在命令行中使用 Ctrl + C

博客介绍了僵尸进程的产生,即子进程结束但内存未完全释放就会变成僵尸进程。还进行了测试,运行程序显示子进程pid为16487、父进程id为16486,通过ps -aux查看进程状态,子进程处于僵尸状态,父进程处于可中断等待状态。
5426

被折叠的 条评论
为什么被折叠?



