创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
Linux系列专栏:Linux基础给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
在Linux或Unix系统中,子进程只能由父进程进行回收。
如果进程结束但是进程资源仍未被回收,这个进程将会变为僵尸进程,会导致内存泄漏和系统性能下降。
使用getchar()
阻塞父进程的执行,子进程结束后父进程未对其进行回收:
#include
#include
int main()
{
printf("11111111\n");
pid_t pid;
pid = fork();
if(pid > 0)
{
//Father
printf("Father pid:%d \n",getpid());
getchar();
}
else if(pid == 0)
{
//Child
printf("Child pid:%d,Father pid:%d\n",getpid(),getppid());
}
else
{
perror("processs fail\n");
}
printf("22222\n");
return 0;
}
使用ps aux
命令查看进程:
其中Z+符号代表了这是一个僵尸进程
使用wait()
函数可以用于回收一个僵尸进程
pid_t wait(int* status) //参数为传出参数,用于获取退出原因/状态,可以传NULL
wait()函数返回值
wait()函数是阻塞函数,如果进程未结束,wait()函数将会阻塞等待进程结束后再执行
父进程调用wait()后,僵尸进程(子进程)执行完被回收:
但是当子进程的代码未执行完时,父进程中的wait()
函数将会一直阻塞,下面介绍一个非阻塞的主动回收僵尸进程的函数:
使用waitpid()
函数可以用于回收一个僵尸进程(非阻塞)
pid_t waitpid(pid_t pid,int* status,int options)
函数的返回值:
pid_t pid:
options:
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |