linux为什么会产生zombie

68次阅读
没有评论

共计 1202 个字符,预计需要花费 4 分钟才能阅读完成。

这篇文章主要介绍了 linux 为什么会产生 zombie 的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 linux 为什么会产生 zombie 文章都会有所收获,下面我们一起来看看吧。

linux 产生 zombie(僵尸进程)的原因是:父进程产生子进程后,子进程先于父进程退出,但父进程没有处理子进程发出的退出信号,因此子进程就会被称为僵尸进程;此时使用 root 身份也不能 kill 杀死进程,可以通过杀死子进程的父进程来解决。

本教程操作环境:linux7.3 系统、Dell G3 电脑。

linux 产生 zombie 的原因是什么

产生原因:

僵尸进程,英文名 zombie process,顾名思义就是死掉的进程。那么僵尸进程究竟是什么产生的呢

僵尸进程产生的原因就是父进程产生子进程后,子进程先于父进程退出,但是父进程由于种种原因,并没有处理子进程发送的退出信号,那么这个子进程就会成为僵尸进程。

这个是所谓的 zombie(僵尸进程)是指在 fork()/execve() 过程中,假设子进程结束时父进程仍存在,而父进程 fork() 之前既没安装 SIGCHLD 信号处理函数调用 waitpid() 等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是 root 身份 kill - 9 也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程 (僵尸进程的父进程必然存在),僵尸进程成为”孤儿进程”,过继给 1 号进程 init,init 始终会负责清理僵尸进程。

僵尸进程是指的父进程已经退出, 而该进程 dead 之后没有进程接受, 就成为僵尸进程.(zombie) 进程

解决方法:

(1)父进程通过 wait 和 waitpid 等函数等待子进程结束,这会导致父进程挂起。

执行 wait()或 waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生 defunct 进程。

(2)如果父进程很忙,那么可以用 signal 函数为 SIGCHLD 安装 handler。在子进程结束后,父进程会收到该信号,可以在 handler 中调用 wait 回收。

(3)如果父进程不关心重点内容子进程什么时候结束,那么可以用 signal(SIGCLD, SIG_IGN)或 signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号

(4)fork 两次,父进程 fork 一个子进程,然后继续工作,子进程 fork 一个孙进程后退出,那么孙进程被 init 接管,孙进程结束后,init 会回收。不过子进程的回收还要自己做。

关于“linux 为什么会产生 zombie”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“linux 为什么会产生 zombie”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1202字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)