怎么查看ubuntu下怎么杀死进程

Python014

怎么查看ubuntu下怎么杀死进程,第1张

方法/步骤

要关闭进程,我们首先要打开类似于windows系统下面的“任务管理器”程序,在Ubuntu系统下“任务管理器”叫做“系统监视器”,他们的功能基本类似,不过Ubuntu下面的“系统监视器”比windows的任务管理器功能更强大。

有两种方法可以打开“系统监视器”,下面我们分别说明

打开系统监视器方法一

依次点击“system”--->“Administration”----->“System Monitor”,如下图所示:

打开系统监视器方法二

对于喜欢命令的朋友来说,可以用下面的命令打开系统监视器,打开终端命令窗口,然后输入以下命令执行:

gnome-system-monitor

系统监视器打开后如下图所示,默认的页面我们可以看到关于系统的配置情况

我们点击“Processes”,进入到进程列表界面,现在感觉到和windows下的任务管理器很相似吧。

下面我们就进入我们的正题,结束进程,一般结束之前自己一定要对这个进程有所了解,知道它具体的功能作用,不然结束后,可能会引起系统的不稳定甚至死机。

因为我这个电脑上面没有蓝牙模块,但是进程里面有提供蓝牙模块的服务功能,所以我们就以这个进程为例来作为我们结束的对象,我们选择这个进程bluetooth-applet,如下图所示:

在bluetooth-applet进程上面点鼠标右键,之后会弹出如下关于对进程操作的一些菜单,我们这里要彻底的结束bluetooth-applet进程,所以我们选择“kill process”

选择并点击“kill process”后,会弹出结束进程的确认提示框,如下图所示,我们选择选择“kill process”就可以结束bluetooth-applet进程了。

结束bluetooth-applet进程后,我们再看进程列表里面已经没有bluetooth-applet进程了,操作非常简单,也和windows系统下面结束进程的方法类似 -_-

在windows下启动JBoss服务器,需要在命令行中输入run.bat。但是运行后如果你想停止服务器,可能的做法就是直接按Ctrl+C键强行终止服务器,显然这种方式是不友好的。另一种方法就是再开一个cmd窗口,进入Jboss的bin目录,然后键入shutdown.bat -S. 这样毕竟费时费力,如果能像Linux下在命令行的后面加一个&让它在后台运行,要关闭时就不用另开窗口直接输入相应的关闭命令就好了。答案就在下面:

在执行的命令前加上start /b,比如start /b run.bat。就相当于Linux下的run.sh &。

在了解僵尸进程之前,让我们来复习一下什么是 Linux 进程。

简而言之, 进程 [1] 是一个程序的运行实例。它可能运行在前端(比如有交互的进程),也可能运行在后端(比如无交互或自动运行的进程)。它可能是一个父进程(运行期间创建了其他进程),也可能是一个子进程(由其他进程所创建)。

在 Linux 系统中,除 PID 为 0 的第一个 init 进程(或 systemd )外,其余进程都有父进程。进程也可以拥有自己的子进程。

不相信?可以试试在终端中使用 pstree 命令查看进程的树型结构,你能看到系统各个进程的“家族树”。

子进程死亡后,它的父进程会接收到通知去执行一些清理操作,如释放内存之类。然而,若父进程并未察觉到子进程死亡,子进程就会进入到“<ruby style="box-sizing: border-box">僵尸<rt style="box-sizing: border-box">zombie</rt></ruby>”状态。从父进程角度看,子进程仍然存在,即使子进程实际上已经死亡。这就是“<ruby style="box-sizing: border-box">僵尸进程<rt style="box-sizing: border-box">zombie process</rt></ruby>”(也被称为“<ruby style="box-sizing: border-box">已消失进程<rt style="box-sizing: border-box">defunct process</rt></ruby>”)是如何产生并存在于系统中的。

这里有一个来自 Turnoff.us [2] 的关于僵尸进程的非常有趣的看法:

Image credit: Turnoff.us

重点要说的是,僵尸进程并没有像它的名称那样看起来可怕。

但如果系统的内存已经所剩不多或者有太多的僵尸进程在吃掉内存,问题会变得糟糕。同样,大部分 Linux 系统进程最大 PID 设置为 32768,如果过多僵尸进程导致其他重要任务没有 PID 可用,你的系统会发生崩溃。

这是真实可能发生的,它有一定的概率,特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候。

在这种情况下,找到并杀死僵尸进程是一个明智的做法。

Linux 系统中的进程可能处于如下状态中的一种:

那如何查看进程和它的当前状态呢?一个简单的方法是在终端中使用 top 命令 [3]。

Top command show processes and their status

正如你在上面截图中看到的,截图中共有 250 个任务(进程),其中 1 个处在 “<ruby style="box-sizing: border-box">运行中<rt style="box-sizing: border-box">running</rt></ruby>” 状态,248 个进程处于 “<ruby style="box-sizing: border-box">休眠<rt style="box-sizing: border-box">sleep</rt></ruby>” 状态,还有一个处于 “<ruby style="box-sizing: border-box">僵尸<rt style="box-sizing: border-box">zombie</rt></ruby>” 状态。

现在问题进入下一步,如何杀死 “僵尸” 进程?

僵尸进程已经死了,要如何才能杀死一个已经死亡的进程呢?

在僵尸电影中,你可以射击僵尸的头部或烧掉它们,但在这里是行不通的。你可以一把火烧了系统来杀死僵尸进程,但这并不是一个可行的方案。

一些人建议发送 SIGCHLD 给父进程,但这个信号很可能会被忽略。还有一个方法是杀死父进程来杀死僵尸进程,这听起来很野蛮,但它却是唯一能确保杀死僵尸进程的方法。

首先,通过在终端中 使用 ps 命令 [4] 我们列举僵尸进程,得到它们的进程 ID:

<pre class="prettyprint linenums" style="box-sizing: border-boxoverflow: hiddenfont: 400 12px / 20px "courier new"display: blockpadding: 10px 15pxmargin: 20px 0pxcolor: rgb(248, 248, 212)word-break: break-alloverflow-wrap: break-wordbackground: rgb(39, 40, 34)border: noneborder-radius: 4pxbox-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px insetletter-spacing: normalorphans: 2text-align: starttext-indent: 0pxtext-transform: nonewidows: 2word-spacing: 0px-webkit-text-stroke-width: 0pxtext-decoration-thickness: initialtext-decoration-style: initialtext-decoration-color: initial">

</pre>

ps ux 命令输出的第 8 列显示了进程状态。上述命令只会打印所有处在 Z+ 状态(表示僵尸状态)的进程。

确认了进程 ID 后,我们可以得到它的父进程 ID:

<pre class="prettyprint linenums" style="box-sizing: border-boxoverflow: hiddenfont: 400 12px / 20px "courier new"display: blockpadding: 10px 15pxmargin: 20px 0pxcolor: rgb(248, 248, 212)word-break: break-alloverflow-wrap: break-wordbackground: rgb(39, 40, 34)border: noneborder-radius: 4pxbox-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px insetletter-spacing: normalorphans: 2text-align: starttext-indent: 0pxtext-transform: nonewidows: 2word-spacing: 0px-webkit-text-stroke-width: 0pxtext-decoration-thickness: initialtext-decoration-style: initialtext-decoration-color: initial">

</pre>

你也可以将上述两个命令结合在一起,直接得到僵尸进程的 PID 及其父进程的 PID:

<pre class="prettyprint linenums" style="box-sizing: border-boxoverflow: hiddenfont: 400 12px / 20px "courier new"display: blockpadding: 10px 15pxmargin: 20px 0pxcolor: rgb(248, 248, 212)word-break: break-alloverflow-wrap: break-wordbackground: rgb(39, 40, 34)border: noneborder-radius: 4pxbox-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px insetletter-spacing: normalorphans: 2text-align: starttext-indent: 0pxtext-transform: nonewidows: 2word-spacing: 0px-webkit-text-stroke-width: 0pxtext-decoration-thickness: initialtext-decoration-style: initialtext-decoration-color: initial">

</pre>

现在你得到了父进程 ID,使用命令行和得到的 ID 号 终于可以杀死进程了 [5]:

<pre class="prettyprint linenums" style="box-sizing: border-boxoverflow: hiddenfont: 400 12px / 20px "courier new"display: blockpadding: 10px 15pxmargin: 20px 0pxcolor: rgb(248, 248, 212)word-break: break-alloverflow-wrap: break-wordbackground: rgb(39, 40, 34)border: noneborder-radius: 4pxbox-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px insetletter-spacing: normalorphans: 2text-align: starttext-indent: 0pxtext-transform: nonewidows: 2word-spacing: 0px-webkit-text-stroke-width: 0pxtext-decoration-thickness: initialtext-decoration-style: initialtext-decoration-color: initial">

</pre>

Killing parent process

再次运行 ps 命令或 top 命令,你可以验证僵尸进程是否已经被杀死。

恭喜!现在你知道怎么清理僵尸进程了。

via: https://itsfoss.com/kill-zombie-process-linux/