我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux中怎么杀死defunct进程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux中怎么杀死defunct进程

Linux中怎么杀死defunct进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、什么是defunct进程(僵尸进程)
在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。

二、 Linux下进程的运作方式
每个 Linux进程在进程表里都有一个进入点(entry),核心进程执行该进程时使用到的一切信息都存储在进入点。当用 ps 命令察看系统中的进程信息时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个进入点,然后将相关信息存储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。
子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。那么会不会因为父进程太忙来不及 wait 子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢?
不会。因为 Linux提供了一种机制可以保证,只要父进程想知道子进程结束时的状态信息,就可以得到。这种机制就是:当子进程走完了自己的生命周期后,它会执行exit()系统调用,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出码exit code,退出状态the terminationstatus of the process,运行时间the amount of CPU time taken by the process等),这些数据会一直保留到系统将它传递给它的父进程为止,直到父进程通过wait / waitpid来取时才释放。
也就是说,当一个进程死亡时,它并不是完全的消失了。进程终止,它不再运行,但是还有一些残留的数据等待父进程收回。当父进程 fork() 一个子进程后,它必须用 wait() (或者 waitpid())等待子进程退出。正是这个 wait() 动作来让子进程的残留数据消失。

三、僵尸进程的危害
如果父进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统的进程表容量是有限的,所能使用的进程号也是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。
所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。而且,由于调度程序无法选中Defunct 进程,所以不能用kill命令删除Defunct 进程,惟一的方法只有重启系统。

四、如何杀死defunct进程
defunct进程是指出错损坏的进程,父子进程之间不会再通信。有时,它们会演变成“僵尸进程”,存留在你的系统中,直到系统重启。可以尝试 “kill -9” 命令来清除,但多数时候不管用。
为了杀死这些defunct进程,你有两个选择:
1.重启你的计算机
2.继续往下读...
我们先看看系统中是否存在defunct进程:

代码如下:


$ ps -A | grep defunct


假设得到的输出如下所示:

代码如下:


8328 ? 00:00:00 mono <defunct>
8522 ? 00:00:01 mono <defunct>
13132 ? 00:00:00 mono <defunct>
25822 ? 00:00:00 ruby <defunct>
28383 ? 00:00:00 ruby <defunct>
18803 ? 00:00:00 ruby <defunct>


这意味着存在6个defunct进程:3个mono进程,以及3个ruby进程。这些进程之所以存在,可能是因为应用程序写得很烂或者用户做了不常见的操作,在我这,一定是我写的mono C#程序存在严重问题 :smile: 。
现在,我们来看看这些进程的ID及其父进程ID:

代码如下:


$ ps -ef | grep defunct | more


以上命令的输出如下:

代码如下:


UID PID PPID ...
---------------------------------------------------------------
kenno 8328 6757 0 Mar22 ? 00:00:00 [mono] <defunct>
kenno 8522 6757 0 Mar22 ? 00:00:01 [mono] <defunct>
kenno 13132 6757 0 Mar23 ? 00:00:00 [mono] <defunct>
kenno 25822 25808 0 Mar27 ? 00:00:00 [ruby] <defunct>
kenno 28383 28366 0 Mar27 ? 00:00:00 [ruby] <defunct>
kenno 18803 18320 0 Apr02 ? 00:00:00 [ruby] <defunct>


UID:用户ID
PID:进程ID
PPID:父进程ID
如果你使用命令 “kill -9 8328” 尝试杀死ID为8328的进程,可能会没效果。要想成功杀死该进程,需要对其父进程(ID为6757)执行kill命令($ kill -9 6757)。对所有这些进程的父进程ID应用kill命令,并验证结果($ ps -A | grep defunct)。

看完上述内容,你们掌握Linux中怎么杀死defunct进程的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux中怎么杀死defunct进程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux中怎么杀死defunct进程

Linux中怎么杀死defunct进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、什么是defunct进程(僵尸进程)在 Linux 系统中,一个进程结束了,但是他的父进
2023-06-12

linux怎么杀死进程kill

在Linux中,可以使用kill命令来杀死进程。kill命令的基本语法如下:```kill [选项] 进程ID```常用的选项包括:- -KILL或-9:强制杀死进程- -TERM或-15:发送SIGTERM信号,请求进程正常退出- -IN
2023-09-11

linux怎么杀死多个进程

要杀死多个进程,可以使用以下命令:1. 使用`ps`命令来查找要杀死的进程的PID(进程ID),如:```ps -ef | grep ```2. 使用`grep`命令过滤出要杀死的进程,并使用`awk`命令提取出PID,如:```ps -e
2023-09-08

linux怎么查看进程和杀死进程

要查看进程,可以使用以下命令:1. `ps`命令:显示当前用户的进程列表。```ps```2. `top`命令:实时显示进程的资源使用情况。```top```3. `htop`命令:类似于`top`命令,但提供更丰富的交互式界面。```ht
2023-09-28

linux怎么杀死所有java进程

要杀死所有Java进程,可以使用以下命令:1. 使用ps命令列出所有Java进程的PID(进程ID):```ps -ef | grep java```2. 使用kill命令逐个杀死Java进程:```kill ```其中,是ps命令输出的J
2023-10-11

Linux下怎么杀死僵尸进程

这篇文章将为大家详细讲解有关Linux下怎么杀死僵尸进程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 中的进程是什么?这一切始于执行 Linux 中的一个程序时,当它被执行时,它的运行实例被称
2023-06-27

linux怎么杀死所有nginx进程

可以使用以下命令来杀死所有的nginx进程:1. 使用ps命令查找nginx进程的PID(进程ID):```ps aux | grep nginx```2. 使用kill命令杀死所有nginx进程:```sudo killall nginx
2023-09-27

linux僵尸进程杀不死怎么解决

今天小编给大家分享一下linux僵尸进程杀不死怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux僵尸进程杀不死
2023-06-30

Linux系统kill命令怎么杀死进程

这篇文章的内容主要围绕Linux系统kill命令怎么杀死进程进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!当我们打开一个程序然后突然程序会锁死、停止
2023-06-28

Linux中怎么通过kill命令杀死指定进程

这篇文章将为大家详细讲解有关Linux中怎么通过kill命令杀死指定进程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一 杀死指定进程现知道有一个curl线程正在运行,需要杀死anggang@barry
2023-06-12

linux下杀死进程的方法

本篇内容介绍了“linux下杀死进程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. kill作用:根据进程号杀死进程用法: kil
2023-06-17

Linux怎么正确使用kill命令杀死进程

这篇文章给大家分享的是有关Linux怎么正确使用kill命令杀死进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是L
2023-06-27

linux如何查看进程号并杀死进程

这篇文章给大家分享的是有关linux如何查看进程号并杀死进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、
2023-06-15

linux查看进程和杀死进程的方法是什么

在Linux中,可以使用以下命令来查看进程和杀死进程:1. 查看进程:- `ps`命令:可以显示当前运行的进程。常用的选项包括:- `ps aux`:显示所有用户的所有进程。- `ps -ef`:显示所有进程。- `top`命令:可以动态地
2023-09-22

linux杀死进程的五种方法(kill)

添加链接描述 相关博主的链接; 方法一:通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill
2023-08-19

linux强制杀死进程的方法是什么

在Linux中,有几种方法可以强制杀死进程:1. 使用kill命令:kill命令用于向进程发送信号。默认情况下,kill命令发送的是SIGTERM信号,即终止进程的请求。要强制终止进程,可以使用-9选项,即发送SIGKILL信号。例如,要强
2023-08-26

Linux系统杀死进程的方法是什么

这期内容当中小编将会给大家带来有关Linux系统杀死进程的方法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查找过程杀死无反应过程的第一步就是找到它。有两个命令用于定位一个进程:top和ps。顶部是
2023-06-28

linux杀死进程命令kill如何使用

本篇内容介绍了“linux杀死进程命令kill如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在linu
2023-01-05

linux杀死进程kill的方法有哪些

在Linux系统中,有多种方法可以杀死进程。以下是一些常用的方法:1. 使用kill命令:kill命令可以向进程发送信号,通过向进程发送特定的信号(如SIGTERM)来请求进程终止。例如,要杀死进程ID为1234的进程,可以运行以下命令:`
2023-08-26

编程热搜

目录