当前位置: > 系统教程 > 怎样产生僵尸进程一个进程(zombie)(图)

怎样产生僵尸进程一个进程(zombie)(图)

发布时间:2021-04-08 09:05:03 文章来源:Linux系统下载站 浏览量:

[导读] : 怎样产生僵尸进程它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。为什么系统中有时会有很多的僵尸进程。怎么查看僵尸进程利用命令ps,可以看到有父进程ID为1的进程是孤儿进程;s(state)状态为Z的是僵尸进程。process)是尚未终止但已停止(相当于前台挂起)的进程,但其父进程已经终止,由init收养;而僵尸进程则是已终止的进程,其父进程不一定终止。

怎样产生僵尸进程一个进程(zombie)(图)

僵尸进程是指已终止的进程,但其父进程尚未对其进行处理以获取有关终止的进程的信息。此过程称为“僵尸”(zombie)。

如何生成僵尸进程

当进程调用exit命令以终止其生命时,它实际上并没有被破坏,而是留下了称为僵尸进程(Zombie)的数据结构(系统调用exit,其功能是使进程退出,但这仅限于将正常过程转变为僵尸过程,并且不能完全摧毁它。)

在Linux进程的状态下,僵尸进程是一种非常特殊的类型。它几乎放弃了所有内存空间,没有任何可执行代码,并且无法计划。它仅在流程列表中保留一个位置,并记录信息僵尸进程,例如该流程的退出状态由其他流程收集。此外,僵尸进程不再占用任何内存空间。它需要其父进程来为其收集尸体。如果其父进程未安装SIGCHLD信号处理功能,并调用wait或waitpid()来等待子进程的结束,并且未显式忽略该信号僵尸进程,则它将保持僵尸状态。此时,父进程结束,然后init进程将自动接管子进程,为其收集主体,并且仍可以清除它。但是,如果父进程是一个循环并且不会结束,那么子进程将保持僵尸状态,这就是为什么系统中有时会有很多僵尸进程的原因。

僵尸进程_僵尸进程如何产生的_僵尸进程

如何检查僵尸进程

使用命令ps,您可以看到父进程ID为1的进程是孤立进程;状态为Z的过程是僵尸过程。

注意:孤立进程是尚未终止但已停止(等同于前台挂起)但其父进程已终止并被init所采用的进程;僵尸进程是终止进程,但其父进程不一定终止。

如何清除僵尸进程并重写父进程,并在子进程死后为该子进程收集尸体。具体方法是接管SIGCHLD信号。子进程死亡后,它将SIGCHLD信号发送到父进程。接收到此信号后,父进程执行waitpid()函数来收集子进程的尸体。这是基于以下原则:即使父进程不调用wait,内核也会向其发送SIGCHLD消息,尽管默认处理是忽略,但如果要响应此消息,则可以设置处理功能。杀死父进程。父进程死亡后,僵尸进程成为“孤立进程”,并被用于第一个进程init。 Init将始终负责清理僵尸进程。关闭或重新启动后,所有僵尸进程都将消失。如何避免僵尸进程在SVR4中,如果调用signal或sigset将SIGCHLD的配置设置为忽略,则不会有死子进程。此外,使用SVR4版本的sigaction,可以设置SA_NOCLDWAIT标志以避免子进程冻结。您也可以在Linux中使用它,在程序开始时调用此函数信号(SIGCHLD,SIG_IGN)。两次呼叫fork。使用waitpid等待子进程返回。