如何在 Linux 中终止进程或停止程序

以下是在 Linux 中使用命令行或图形界面终止程序的几种方法。
308 位读者喜欢这篇文章。
x sign

Thomas Hawk 通过 Flickr。CC BY-NC 2.0

当进程行为异常时,您有时可能想要终止或杀死它。在这篇文章中,我们将探讨几种从命令行以及图形界面终止进程或应用程序的方法,我们将使用 gedit 作为示例应用程序。

使用命令行/终止字符

Ctrl + C

从命令行调用 gedit 的一个问题(如果您不使用 gedit &)是它不会释放提示符,因此该 shell 会话被阻塞。在这种情况下,Ctrl+C(Control 键与 'C' 组合)会派上用场。这将终止 gedit,并且所有工作都将丢失(除非文件已保存)。Ctrl+C 向 gedit 发送 SIGINT 信号。这是一个停止信号,其默认操作是终止进程。它指示 shell 停止 gedit 并返回到主循环,您将重新获得提示符。

$ gedit
^C

Ctrl + Z

这被称为挂起字符。它向进程发送 SIGTSTP 信号。这也是一个停止信号,但默认操作不是杀死而是挂起进程。

它将停止(杀死/终止)gedit 并返回 shell 提示符。

   $ gedit
   ^Z
   [1]+  Stopped                 gedit
   $

一旦进程被挂起(在本例中为 gedit),就无法在 gedit 中写入或执行任何操作。在后台,进程变为作业。这可以通过 jobs 命令来验证。

  $ jobs
  [1]+  Stopped                 gedit

jobs 允许您在单个 shell 会话中控制多个进程。您可以根据需要停止、恢复以及将作业移动到后台或前台。

让我们在后台恢复 gedit 并释放提示符以运行其他命令。您可以使用 bg 命令执行此操作,后跟作业 ID(注意上面 jobs 输出中的 [1][1] 是作业 ID)。

   $ bg 1
   [1]+ gedit &

这类似于使用 &, 启动 gedit

   $ gedit &

使用 kill

kill 允许对信号进行精细控制,使您能够通过指定信号名称或信号编号,后跟进程 ID 或 PID 来向进程发送信号。

我喜欢 kill 的一点是它也可以与作业 ID 一起使用。让我们使用 gedit & 在后台启动 gedit。假设我从 jobs 命令中获得了 gedit 的作业 ID,让我们向 gedit 发送 SIGINT

   $ kill -s SIGINT %1

请注意,作业 ID 应以 % 为前缀,否则 kill 会将其视为 PID。

kill 可以不用显式指定信号就可以工作。在这种情况下,默认操作是发送 SIGTERM,这将终止进程。执行 kill -l 以列出所有信号名称,并使用 man kill 命令阅读手册页。

使用 killall

如果您不想指定作业 ID 或 PID,killall 允许您按名称指定进程。使用 killall 终止 gedit 的最简单方法是

   $ killall gedit

这将杀死所有名称为 gedit 的进程。与 kill 一样,默认信号是 SIGTERM。它具有使用 -I 忽略大小写的选项

   $ gedit &
   [1] 14852

   $ killall -I GEDIT
   [1]+  Terminated              gedit

要了解有关 killall 提供的各种标志(例如 -u,它允许您杀死用户拥有的进程)的更多信息,请查看手册页 (man killall)

使用 xkill

您是否遇到过媒体播放器(如 VLC)灰屏或卡死的问题?现在,您可以使用上面列出的命令之一找到 PID 并杀死应用程序,或者使用 xkill

Using xkill

xkill 允许您使用鼠标杀死窗口。只需在终端中执行 xkill,它应该将鼠标光标更改为 x 或一个小的骷髅图标。单击您要关闭的窗口上的 x。但是,请小心使用 xkill,正如其手册页所解释的那样,它可能很危险。已警告您!

有关更多信息,请参阅每个命令的手册页。您还可以探索诸如 pkillpgrep 之类的命令。

标签
psachin
Sachin 对自由和开源软件充满热情。他是 GNU Emacs 的狂热用户,喜欢谈论和撰写有关开源、GNU/Linux、Git 和 Python 的文章。他之前曾在 OpenStack、ManageIQ/CloudForms 和 Red Hat Insights 工作过。他还在业余时间喜欢探索 Swift 对象存储。可以通过 IRC 联系他,用户名是 psachin@{Libera.Chat, Freenode, OFTC, gnome}。

5 条评论

如果以上方法都不奏效(有时进程拒绝终止),请记住计算机的注意力持续时间仅与其电源线一样长。

别忘了 + 如果你遇到像 PHP 或 Python 这样的脚本语言的交互式终端,以及 Vim 的特殊情况,它需要“像它偷了你的午餐钱一样猛击,然后 <:>”

CTRL+D (顶部)

像它偷了你的午餐钱一样猛击 Escape 键,然后是冒号键(双点)、q 键、感叹号键、回车键。

网站真的需要一个编辑按钮

回复 作者 LewisCowles1986

我通常的做法是运行
ps ax
然后查找 PID,然后
kill 'PID'
有时你需要以 sudo 身份运行,具体取决于进程。

确实 - vlc 这些年来仍然会挂起(就像在播放期间弹出 DVD 一样)。首先我会尝试 killall vlc,它尝试让 vlc 自行终止。通常不起作用。如果是这样,我使用 killall -9 vlc,它让操作系统杀死 vlc。并且总是有效。但是不允许 vlc 在杀死之前做任何事情。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.