如何在linux上杀死僵尸进程

写得不好或执行得不好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。...

写得不好或执行得不好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。

进程状态如何在linux上工作

当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内核内存中的结构列表。每个进程在此列表中都有一个条目,其中包含有关它的一些信息。

每个进程表结构中都没有太多内容。它们包含进程ID、一些其他数据项和指向该进程的进程控制块(PCB)的指针。

PCB保存了Linux需要为每个进程查找或设置的许多细节。PCB也会随着进程的创建、给定的处理时间以及最终的销毁而更新。

Linux PCB包含超过95个字段。它被定义为一个名为task_struct.h的结构,长度超过700行。PCB包含以下类型的信息:

  • 进程状态:状态描述如下。
  • 进程号:它在操作系统中的唯一标识符。
  • 程序计数器:当这个进程下一次被赋予访问CPU的权限时,系统将使用这个地址来查找应该执行的进程的下一条指令。
  • 寄存器:这个进程使用的CPU寄存器的列表。该列表可能包含累加器、索引寄存器和堆栈指针。
  • 打开文件列表:与此进程关联的文件。
  • CPU调度信息:用于确定分配给该进程的CPU处理时间的频率和持续时间。进程的优先级、指向调度队列的指针和其他调度参数必须记录在PCB中。
  • 内存管理信息:有关此进程正在使用的内存的详细信息,例如进程内存的起始地址和结束地址,以及指向内存页的指针。
  • I/O状态信息:进程使用的任何输入或输出设备。

“进程状态”可以是以下任一状态:

  • R:正在运行或可运行的进程。运行意味着它接收CPU周期并执行。可运行进程已准备好运行并等待CPU插槽。
  • 学生:睡眠过程。进程正在等待操作完成,例如输入或输出操作,或者等待资源可用。
  • D:进程处于不间断睡眠状态。它正在使用阻塞系统调用,在系统调用完成之前无法继续。与“睡眠”状态不同,处于这种状态的进程在系统调用完成并且执行返回到进程之前不会响应信号。
  • T:进程已终止(停止),因为它接收到SIGSTOP信号。它将只响应SIGKILL或SIGCONT信号,这两个信号分别终止进程或指示进程继续。这就是从前台(fg)任务切换到后台(bg)任务时发生的情况。
  • Z:僵尸程序。当一个过程完成时,它不会消失。它释放所有正在使用的内存,并将自己从内存中移除,但它在进程表和PCB中的条目仍然保留。它的状态设置为EXIT\u ZOMBIE,并且它的父进程(通过SIGCHLD信号)被通知子进程已经完成。

 

在Zombie状态下,创建子进程时,父进程调用wait()函数族之一。然后等待子进程中的状态更改。子进程是否已被信号停止、继续或终止?它是否通过运行代码的自然完成而终止?

如果状态更改意味着子进程已停止运行,则读取其退出代码。然后,销毁子PCB并删除其在进程表中的条目。理想情况下,这一切都发生在眨眼之间,处于僵尸状态的进程不会存在很长时间。

相关:如何在Linux上运行和控制后台进程

是什么导致linux上的僵尸进程?

编写不好的父进程在创建子进程时可能不会调用wait()函数。这意味着没有任何东西在监视子进程中的状态变化,SIGCHLD信号将被忽略。或者,另一个应用程序正在影响父进程的执行,这可能是由于编程不当或恶意意图造成的。

但是,如果父进程没有监视子进程中的状态更改,则不会进行适当的系统内务管理。当子进程终止时,不会删除PCB和进程表中的条目。这将导致僵尸状态永远不会从PCB中移除。

僵尸确实需要一些内存,但它们通常不会造成问题。进程表中的条目很小,但是在它被释放之前,进程ID不能被重用。在64位操作系统上,这不太可能导致任何问题,因为PCB比进程表条目大得多。

可以想象,大量的僵尸会影响其他进程的可用内存量。但是,如果你有那么多僵尸,那么你的父应用程序或操作系统有一个严重的问题。

如何删除僵尸进程

你不能杀死僵尸进程,因为它已经死了。它不会对任何信号做出响应,因为它已经从内存中删除了,没有地方可以发送SIGKILL信号。您可以尝试向父进程发送SIGCHLD信号,但是如果在子进程终止时它不起作用,那么现在也不太可能起作用。

唯一可靠的解决方案是终止父进程。终止时,它的子进程由init进程继承,init进程是在Linux系统中运行的第一个进程(其进程ID为1)。

init进程定期执行必要的僵尸清理,所以要杀死它们,只需杀死创建它们的进程。top命令是查看是否有僵尸的方便方法。

键入以下内容:

top

如何在linux上杀死僵尸进程

这个系统有八个僵尸进程。我们可以使用ps命令并将其管道化到egrep中来列出这些。同样,zombie进程的状态标志是“Z”,您通常还会看到“defunct”

键入以下内容:

ps aux | egrep "Z|defunct"

如何在linux上杀死僵尸进程

将列出僵尸进程。

如何在linux上杀死僵尸进程

这是一个更整洁的方式来发现僵尸的进程ID比在顶部来回滚动。我们还看到一个名为“badprg”的应用程序产生了这些僵尸。

第一个僵尸的进程ID是7641,但是我们需要找到其父进程的进程ID。我们可以再次使用ps。我们将使用output选项(-o)告诉ps只显示父进程ID,然后用ppid=flag传递它。

我们要查找的进程将通过使用-p(process)选项来指示,然后传入zombie的进程ID。

因此,我们键入以下命令来查找进程7641的进程信息,但它只报告父进程的ID:

ps -o ppid= -p 7641

如何在linux上杀死僵尸进程

我们被告知父进程ID是7636。我们现在可以再次使用ps来交叉引用。

如何在linux上杀死僵尸进程

我们看到它与前面的父进程的名称相匹配。要终止父进程,请将SIGKILL选项与kill命令一起使用,如下所示:

kill -SIGKILL 7636

根据父进程的所有者,您可能还需要使用sudo。

僵尸并不可怕…

…除非他们在一个庞大的部落里。有几个是不需要担心的,一个简单的重启将消灭他们。

但是,如果您注意到某个应用程序或进程总是在生成僵尸,那么您应该对此进行研究。它很可能只是一个草率编写的程序,在这种情况下,可能有一个更新的版本,可以在其子进程之后进行适当的清理。

  • 发表于 2021-04-01 07:47
  • 阅读 ( 233 )
  • 分类:互联网

你可能感兴趣的文章

linux中杀死无响应程序的7种方法

...是最好的应用程序也可能挂起。与其等待它们崩溃,不如杀死这些没有响应的程序。事实上,有很多方法可以杀死Linux程序,你可能会发现自己被宠坏了! ...

  • 发布于 2021-03-18 00:56
  • 阅读 ( 361 )

linux命令参考备忘单

...便的Linux命令备忘单。如果您想运行其中的几个,请查看如何在带屏幕的Linux终端上执行多任务。 ...

  • 发布于 2021-03-22 04:06
  • 阅读 ( 229 )

什么是mylobot恶意软件?它是如何工作的,该怎么办

网络安全是一个永恒的战场。2017年,安全研究人员每天发现约23000个新的恶意软件样本(即每小时795个)。 ...

  • 发布于 2021-03-24 09:02
  • 阅读 ( 347 )

黑客如何利用僵尸网络破坏你最喜欢的网站

... 让我们看看僵尸网络的力量是如何扩张的,以及你听到的下一个巨大的DDoS将如何比上一个更大。 ...

  • 发布于 2021-03-25 10:49
  • 阅读 ( 207 )

linux中的进程是什么?

... 流程如何开始 ...

  • 发布于 2021-03-27 02:21
  • 阅读 ( 233 )

2020年是linux恶意软件大流行的一年吗?

...你的系统,例如,可能是渗透他们的第一步。因此,评估如何保护您的系统是值得的。 ...

  • 发布于 2021-03-29 07:01
  • 阅读 ( 304 )

为什么ram助推器和任务杀手对android不好

... android如何使用ram ...

  • 发布于 2021-03-30 19:11
  • 阅读 ( 345 )

没有systemd的最佳linux发行版

...行多次备份,然后才安装新的Linux。 相关:初学者极客:如何创建和使用虚拟机

  • 发布于 2021-03-31 14:20
  • 阅读 ( 187 )

如何从linux终端检查内存使用情况

...ee、vmstat和top。我们还将直接查看reading/proc/meminfo。 linux如何使用ram RAM是一种有限的资源,所有进程(如应用程序和守护进程)都需要它的一部分。只有这么多了。内核判断内存争用,并将定量分配的内存分配给所有饥饿的进...

  • 发布于 2021-04-02 13:03
  • 阅读 ( 207 )

如何在linux上删除用户(并删除所有跟踪)

...死他的进程之前,我们会锁定密码来冻结帐户。 相关:如何使用ps命令监视Linux进程 锁定帐户 在终止进程之前,我们将锁定帐户,因为当我们终止进程时,它将注销用户。如果我们已经更改了他的密码,他就无法登录了。 加密...

  • 发布于 2021-04-02 15:16
  • 阅读 ( 173 )
bjgzarptnw
bjgzarptnw

0 篇文章

相关推荐