如何终止 Linux 上正在运行的进程
Linux 系统上运行的所有内容(服务、脚本或其他任何内容)都被视为“进程”。如果您需要结束 Linux 上正在运行的进程,kill
命令肯定可以完成这项工作。
在本 Linux 管理员指南中,我们将介绍 kill
Linux 命令以及如何使用其各种选项来结束或“杀死”Linux 上正在运行的进程。
在本教程中您将学习:
Kill 命令如何工作?
如何查看正在运行的进程
如何通过PID杀死进程
如何杀死拒绝关闭的进程
如何通过名称杀死进程
如何终止 Linux 上正在运行的进程
Kill 命令如何工作?
有了“kill”这样的名称,您可能会认为该实用程序用于立即结束进程。虽然这是事实,但 kill
仅在与某些选项一起使用时才以这种方式起作用。默认情况下,kill
将尝试尽可能优雅地停止进程。
用技术术语来说,kill
向指定进程发送一个 SIGTERM 信号,并指示该进程关闭。这是结束正在运行的进程的一种礼貌方式,并为应用程序或服务提供了首先完成工作的时间 - 例如完成对日志文件的写入,关闭由进程生成的打开的连接等。
唯一的问题是顽固的程序可能会忽略 SIGTERM 信号。这种情况尤其发生在冻结或“挂起”的进程中。然而,kill
可用于向进程发送许多不同的信号,甚至可以使用 SIGKILL 信号强制最顽固的信号关闭。我们将在下一节中讨论这些选项。
从这些信息中得到的重要一点是,如果可能的话,您应该向您希望结束的进程发送一个普通的
如何查看正在运行的进程
Linux 中的每个进程都分配有一个唯一的“进程 ID”,在 Linux 终端中通常缩写为 PID。有时,为了结束进程,需要知道进程的 PID。要查看正在运行的进程列表及其相应的 PID 号,请使用 ps
命令:
# ps -e
这可能会产生大量输出,因为即使是全新安装的 Linux 也可能有相当多的正在运行的进程,因此通常最好将此命令通过管道传递给 grep
或 more
。
要获得更易于管理的视图:
# ps -e | more -15
或者查找特定进程(本例中为 ssh):
# ps -e | grep ssh
获取正在运行的进程的PID
查看正在运行的进程及其 PID 列表的另一种便捷方法是使用 top
命令。有时这甚至更有用,因为它还显示进程正在使用多少系统资源。
用top命令查看PID
如何通过PID杀死进程
一旦确定了要结束的进程的 PID,您就可以将其指定为 kill
命令的参数。例如,要结束 PID 为 1234 的进程:
# kill 1234
此命令发送一个 SIGTERM 信号,并且应该能够在一两秒内关闭大多数进程。请记住,您可以再次使用 ps
命令来验证进程是否已成功关闭。
# ps -e | grep 1234
如何杀死拒绝关闭的进程
如果您遇到拒绝关闭的顽固进程,您可以在 kill
上使用 -9
选项发出 SIGKILL 信号。
# kill -9 1234
请记住谨慎使用此选项,因为它不是结束进程的理想方式(但有时您必须这样做)。
通常,SIGTERM 和 SIGKILL 可能是您需要使用的仅有的两个信号,但是您可以使用 kill
发送许多其他信号。命令。以下命令将输出完整列表:
# kill -L
Kill 可以发送的信号列表
至少了解其他选项是有好处的,因为某些程序或脚本可能会推荐使用它们。
正如您在输出中看到的,SIGKILL 列在#9 处,这就是 -9
开关发送 SIGKILL 信号的原因。指定不同的数字以将其各自的信号发送到进程。
如何通过名称杀死进程
有一种比每次都要查找进程 PID 更快的方法来结束进程。使用 pkill
命令和您要终止的进程的名称。例如,以下是终止 SSH 的方法:
# pkill ssh
pkill
命令能够发送不同的信号,就像常规的 kill
命令一样:
# pkill -9 ssh
也不必担心获取进程的确切名称。该命令杀死了我们系统上运行的名为 ssh-agent 的进程。
使用 pkill
而不是 kill
有一个缺点。假设您有两个正在运行的 SSH 进程:“ssh-server”和“ssh-agent”。使用 pkill
发出上述命令将结束这两个进程,即使您只想结束 ssh-agent 也是如此。
如果您运行一个脚本的多个实例,这也是一个问题,因为告诉 pkill 结束该脚本将结束该脚本的所有实例。话又说回来,有时这种行为可能更可取。如果您需要更精细的控制,请记住选择 kill
命令。
结论
在本文中,我们了解了如何使用 kill
命令终止 Linux 系统上运行的任何进程。我们学习了如何通过 PID 或名称来终止进程,以及这两种方法的优缺点。
了解 kill
命令及其使用方法的最佳实践后,您可以更好地控制系统上运行的进程。这对于有时“挂起”并拒绝关闭的程序特别方便。