如何从 Linux 终端终止进程

杀死进程有时是摆脱它的唯一方法。尽管名字很刺耳,“杀死”一个进程只是意味着“强迫它退出”。以下是从 Linux 或 macOS 命令行执行此操作的方法。
什么是流程?
运行程序,如您的 Web 浏览器、与您的桌面环境相关的后台进程以及 Linux 系统服务都是进程。
您可以将流程分为两组:
- 前台进程 是由用户启动或启动的进程。它们可能位于终端窗口中,也可能是图形应用程序。
- 后台进程是所有自动启动的进程,不与用户进行任何交互。他们不期望用户输入,也不向他们展示结果或输出。后台进程类似于服务和守护进程。
如果说前台流程是前台的剧院工作人员和演员,那么后台流程就是后台“幕后”团队。
当进程行为不当或出现故障时,它们可能会占用过多的 CPU 时间、消耗您的 RAM,或者进入紧密的计算循环并变得无响应。图形应用程序可以拒绝响应鼠标点击。终端应用程序可能永远不会将您返回到命令提示符。
人道的答案
“杀死”进程只是意味着“强制进程退出”。如果进程拒绝响应,这可能是必要的。
Linux 提供了 kill
、pkill
和 killall
命令来让您做到这一点。这些命令可用于任何类型的进程、图形或命令行、前台或后台。
杀戮命令
要使用 kill
,您必须知道要终止的进程的进程 ID (PID)。 ps
命令可用于查找进程的 PID。
要让 ps
搜索所有进程,请使用 -e
(所有进程)选项。通过 less
管道输出是可取的,会有相当多的。输入 ps
,一个空格,-e
,一个空格,|
(竖线字符),另一个空格,然后输入 less
。按 Enter 键执行命令。
ps -e | less

这将为您提供类似于以下屏幕截图的流程列表。您可以使用 /
键在 less
中向前搜索,也可以使用 ?
键向后搜索。

要了解您感兴趣的进程,请将 ps
的输出通过 grep
进行管道传输,并指定进程的名称(或名称的一部分)。
ps -e | grep shutter

找到要终止的进程的 PID 后,将其作为参数传递给 kill
命令。要终止由上一个命令标识的 shutter
进程,请使用以下命令:
kill 2099

kill
命令是一个无声的刺客——如果它成功了,它不会给你任何反馈。
它在 macOS 上的终止进程也同样有效。
pkill 命令
pkill
命令允许您按名称终止一个或多个进程。您不需要通过 PID 来标识进程。要使用 pkill
,您需要提供一个搜索词,pkill
会使用它来检查正在运行的进程列表。匹配过程终止。所以你需要确定你的搜索词拼写正确。
作为安全网,您可以在使用 pkill
命令之前 使用 pgrep
命令。 pgrep
命令也接受搜索词。它将列出与搜索词匹配的每个进程的 PID。这是安全的,因为 pgrep
不会向进程发出任何终止信号,如果您输入了错误的搜索词,您也不会错误地终止另一个进程。在将搜索词传递给 pkill
之前,您可以确保正确考虑了搜索词。 pkill
和 pgrep
都以相同的方式处理搜索词。它们的处理方式非常相似,以至于它们共享相同的手册页。
假设有一个名称中包含“subq”的进程。我们将使用 ps -u dave | grep
命令来查看幕后情况。你可以看到“subq”将匹配那个进程并且只匹配那个进程。那只是为了让您可以看到流程的全名。
ps -u dave | grep subq

假设我们的用户没有这样做;他们只知道进程名称包含子字符串“subq”。他们使用 pgrep
检查搜索项是否只有一个匹配项。然后他们将该搜索词与 pkill
一起使用。
pgrep subq
pkill subq

您可以使用 pkill
一次终止多个进程。在这里,用户运行 pgrep
来检查 Chrome 启动了多少个进程。他们使用 pkill
来杀死他们。然后他们使用 pgrep
检查它们是否已全部删除。
pgrep chrome
pkill chrome
pgrep chrome

如果多个同名进程正在运行,但您不想将它们全部杀死,则可以使用带有 -f
(命令行)选项的 pgrep
来识别哪个进程过程是哪个。一个简单的示例是两个 ping
进程。您想杀死其中一个,但不想杀死另一个。您可以使用它们的命令行来区分它们。请注意使用引号将命令行参数括起来。
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

killall 命令
警告:在 Solaris 和 OpenIndiana 操作系统中,killall
命令将杀死属于您的所有进程。如果是 root 用户或者您已发出 sudo killall
,您将重新启动计算机!在本文的研究过程中,最新版本的 OpenIndiana Hipster 2018.10 证实了这种行为。
killall
命令的操作方式与 pkill
命令类似,但有一个特定的区别。您必须提供准确的进程名称,而不是将搜索词传递给命令。
您不能提供与流程名称的部分匹配;您必须提供完整的进程名称,如下所示:
killall shutt
killall shutter

-y
(小于)选项允许您终止运行时间小于指定时间段的进程。期间以数字形式给出,后跟以下单位之一:
- s(秒)
- 米(分钟)
- h(小时)
- d(天)
- w(周)
- M(月份,注释,大写“M”)
- y(年)
要终止刚刚启动的名为 ana
的进程并让任何较旧的 ana
实例继续运行,您可以将以下参数与 killall
一起使用,如果你在两分钟内做出反应:
killall -y 2m ana

-o
(早于)选项允许您终止运行时间超过指定时间的进程。此命令将终止所有运行时间超过一天的 ssh
连接:
killall -o 1d sshd

不要太激动
这些命令将使您能够准确、安全地识别和终止错误进程。
始终保持谨慎。首先,确保您要杀死的进程确实是您想要的进程。其次,仔细检查——小心并确保目标进程是你想要结束的进程。满意后继续终止该过程。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts