怎样在 Linux 命令行下杀死一个进程

  

 

  想像一下:你打开了一个程序(可能来自于你的桌面菜单或者命令行),然后开始使用这个程序,没想到程序会锁死、停止运行、或者意外死机。你尝试再次运行该程序,但是它反馈说原来的进程没有完全关闭。

  你该怎么办?你要结束进程。但该如何做?不管你信与不信,最好的解决方法大都在命令行里。值得庆幸的是, Linux 有供用户杀死错误的进程的每个必要的工具,然而,你在执行杀死进程的命令之前,你首先需要知道进程是什么。该如何处理这一类的任务。一旦你能够掌握这种工具,它实际是十分简单的……

  让我来介绍给你这些工具。

  我来概述的步骤是每个 Linux 发行版都能用的,不论是桌面版还是服务器版。我将限定只使用命令行,请打开你的终端开始输入命令吧。

  杀死一个没有响应的进程的第一个步骤是定位这个进程。我用来定位进程的命令有两个:top和ps命令。top是每个系统管理员都知道的工具,用top命令,你能够知道到所有当前正在运行的进程有哪些。在命令行里,输入top命令能够就看到你正在运行的程序进程(图1)

  

 

  图 1: top 命令给出你许多的信息。

  从显示的列表中你能够看到相当重要的信息,举个例子,Chrome 浏览器反映迟钝,依据我们的top命令显示,我们能够辨别的有四个 Chrome 浏览器的进程在运行,进程的 pid 号分别是 3827、3919、10764 和 11679。这个信息是重要的,可以用一个特殊的方法来结束进程。

  尽管top命令很是方便,但也不是得到你所要信息最有效的方法。 你知道你要杀死的 Chrome 进程是那个,并且你也不想看top命令所显示的实时信息。 鉴于此,你能够使用ps命令然后用grep命令来过滤出输出结果。这个ps命令能够显示出当前进程列表的快照,然后用grep命令输出匹配的样式。我们通过grep命令过滤ps命令的输出的理由很简单:如果你只输入ps命令,你将会得到当前所有进程的列表快照,而我们需要的是列出 Chrome 浏览器进程相关的。所以这个命令是这个样子:

  这里aux选项如下所示:

  ·a = 显示所有用户的进程

  ·u = 显示进程的用户和拥有者

  ·x = 也显示不依附于终端的进程

  当你搜索图形化程序的信息时,这个x参数是很重要的。

  当你输入以上命令的时候,你将会得到比图 2 更多的信息,而且它有时用起来比top命令更有效。

  

 

  图 2:用 ps 命令来定位所需的内容信息。

  现在我们开始结束进程的任务。我们有两种可以帮我们杀死错误的进程的信息。

  ·进程的名字

  ·进程的 ID (PID)

  你用哪一个将会决定终端命令如何使用,通常有两个命令来结束进程:

  ·kill-通过进程 ID 来结束进程

  ·killall-通过进程名字来结束进程

  有两个不同的信号能够发送给这两个结束进程的命令。你发送的信号决定着你想要从结束进程命令中得到的结果。举个例子,你可以发送HUP(挂起)信号给结束进程的命令,命令实际上将会重启这个进程。当你需要立即重启一个进程(比如就守护进程来说),这是一个明智的选择。你通过输入kill -l可以得到所有信号的列表,你将会发现大量的信号。

  

 

  图 3: 可用的结束进程信号。

  最经常使用的结束进程的信号是:

  Signal Name

  Single Value

  Effect

  SIGHUP

  1

  挂起

  SIGINT

  2

  键盘的中断信号

  SIGKILL

  9

  发出杀死信号

  SIGTERM

  15

  发出终止信号

  SIGSTOP

  17, 19, 23

  停止进程

  好的是,你能用信号值来代替信号名字。所以你没有必要来记住所有各种各样的信号名字。

  所以,让我们现在用kill命令来杀死 Chrome 浏览器的进程。这个命令的结构是:

  这里 SIGNAL 是要发送的信号,PID 是被杀死的进程的 ID。我们已经知道,来自我们的ps命令显示我们想要结束的进程 ID 号是 3827、3919、10764 和 11679。所以要发送结束进程信号,我们输入以下命令:

  一旦我们输入了以上命令,Chrome 浏览器的所有进程将会成功被杀死。

  我们有更简单的方法!如果我们已经知道我们想要杀死的那个进程的名字,我们能够利用killall命令发送同样的信号,像这样:

  附带说明的是,上边这个命令可能不能捕捉到所有正在运行的 Chrome 进程。如果,运行了上边这个命令之后,你输入ps aux | grep chrome命令过滤一下,看到剩下正在运行的 Chrome 进程有那些,最好的办法还是回到kIll命令通过进程 ID 来发送信号值9来结束这个进程。

  正如你看到的,杀死错误的进程并没有你原本想的那样有挑战性。当我让一个顽固的进程结束的时候,我趋向于用killall命令来作为有效的方法来终止,然而,当我让一个真正的活跃的进程结束的时候,kill命令是一个好的方法。

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值