Linux杀死进程的10多个用法示例详解

2021年9月17日04:54:40 发表评论 1,381 次浏览

在本教程中,我们将通过多个示例讨论在 Linux 中杀死进程。在大多数情况下,它就像键入“kill”命令后跟进程 ID(通常缩写为 PID)一样简单。

Linux杀死进程的10多个用法示例详解

如上Linux杀死进程用法示例,我们杀死了一个 ID 为 1813 的进程。

Linux如何杀死进程?如果你是 Windows 用户,将“kill”命令视为 Linux 中Windows 任务管理器中的“结束任务”按钮可能会有所帮助。

Linux杀死进程的方法和教程目录

  • 列出正在运行的进程
  • 通过PID杀死进程
  • kill 命令发送的默认信号
    • 强行关闭
  • 如何按名称杀死所有进程?
  • 如何杀死用户的所有进程?
  • 如何杀死 nohup 进程?
  • 如何在后台运行进程?
    • 使用屏幕命令
  • 如何杀死后台进程?
  • 如何杀死停止的进程?
  • 不允许执行终止操作

列出正在运行的进程

“ps -e”命令将列出系统上运行的所有内容。即使使用最少的安装,该命令也可能会输出 80 多个结果,因此将命令通过管道传输到“ grep ”或“more”要容易得多。

ps -e | grep name-of-process

在下面的屏幕截图中,我们检查系统上是否正在运行 SSH。

Linux杀死进程的10多个用法示例详解

这也为我们提供了 SSH 守护进程的 PID,即 1963。

如果你想一一查看系统正在运行的进程,请使用“更多”管道。

Linux杀死进程的10多个用法示例详解

你还可以使用“top”命令来查看正在运行的进程列表。这很有用,因为它会显示每个进程正在使用多少系统资源。

Linux杀死进程的10多个用法示例详解

Linux如何杀死进程?资源的 PID、用户和名称都在此处标识,如果你决定稍后终止这些服务中的任何一个,这将非常有用。

请注意 %CPU 和 %MEM 列,因为如果你发现一个不重要的进程正在消耗宝贵的系统资源,那么杀死它可能会有所帮助!

获取相应进程 ID 的另一个非常有效的方法是使用“pgrep”命令。你需要提供的唯一参数是正在运行的进程的名称(或名称的一部分)。

这是我们搜索 SSH 时的样子。如你所见,它返回进程 ID 2506。

Linux杀死进程的10多个用法示例详解

Linux杀死进程的方法:通过PID杀死进程

现在我们知道了 SSH 守护进程的 PID,我们可以使用 kill 命令终止进程,如下Linux杀死进程示例代码

$ sudo kill 1963
Linux杀死进程的10多个用法示例详解

你可以发出最后的“ps”命令,以确保该进程确实被终止。

$ ps -e | grep ssh

结果显示为空,这意味着该进程已成功关闭。如果你注意到该进程仍在继续运行——这通常不应该发生——你可以尝试向该进程发送不同的终止信号,如下一个会话中所述。

注意:并非总是需要使用“sudo”或 root 用户帐户来结束进程。在前一个示例中,我们终止了在 root 用户下运行的 SSH 守护进程。因此,我们必须拥有适当的权限才能结束进程。

kill 命令发送的默认信号

默认情况下,kill 命令将向你指定的进程发送SIGTERM 信号

这应该允许进程正常终止,因为 SIGTERM 会告诉进程执行其正常的关闭程序——换句话说,它不会强制进程突然结束。

这是一件好事,因为我们希望我们的流程按照预期的方式关闭。

但是,有时 SIGTERM 信号不足以终止进程。如果你运行 kill 命令并注意到该进程仍在运行,则该进程可能仍在经历其关闭过程,或者它可能已完全挂断。

强行关闭

要强制关闭进程并放弃正常关闭,你可以使用 -9 开关发送 SIGKILL 信号,如下Linux杀死进程用法示例:

$ kill -9 processID
Linux杀死进程的10多个用法示例详解

Linux如何杀死进程?总是在 kill 命令上附加 -9 开关可能很诱人,因为它总是有效。但是,这不是推荐的最佳实践。你应该只在挂起并拒绝正常关闭的进程上使用它。

如果可能,请使用默认的 SIGTERM 信号。从长远来看,这将防止错误,因为它使进程有机会关闭其日志文件,终止任何挥之不去的连接等。

除了 SIGTERM 和 SIGKILL 信号之外,还有许多其他信号可以被 kill 发送到进程,所有这些都可以通过 -l 开关看到。

Linux杀死进程的10多个用法示例详解

名称旁边的数字是你在“kill”命令中指定的数字。例如,kill -9 是 SIGKILL,就像你在上面的屏幕截图中看到的那样。

对于日常操作,SIGTERM 和 SIGKILL 可能是你永远不需要使用的唯一信号。请记住其他人,以防你遇到奇怪的情况,其中进程建议使用不同的信号终止它。

如何按名称杀死所有进程?

你还可以在 pkill 命令中使用正在运行的进程的名称,而不是 PID。但请注意,这将终止以指定名称运行的所有进程,因为 kill 不知道你要终止哪个特定进程。

$ pkill name-of-process

Linux杀死进程的方法:看看下面的例子,我们用一个 pkill 命令终止了五个进程。

Linux杀死进程的10多个用法示例详解

在本例中,我们只想终止其中一个 screen 会话;有必要指定 PID 并使用正常的“kill”命令。否则,无法唯一指定我们希望结束的进程。

如何杀死用户的所有进程?

你还可以使用 pkill 命令终止由Linux 用户运行的所有进程。首先,要查看在特定用户下运行的进程,请使用带有 -u 开关的 ps 命令。

$ ps -u username
Linux杀死进程的10多个用法示例详解

该屏幕截图向我们显示当前有五个服务在用户“geek”下运行。如果你需要快速终止所有这些,你可以使用 pkill 来完成。

$ pkill -u username
Linux杀死进程的10多个用法示例详解

Linux杀死进程用法示例:如何杀死 nohup 进程?

你可以像任何其他正在运行的进程一样终止 nohup 进程。请注意,你无法在 ps 命令中 grep 搜索“nohup”,因此你需要使用与上述相同的方法搜索正在运行的进程。

在此示例中,我们找到了一个名为“test.sh”的脚本,该脚本已使用 nohup 命令执行。正如你将看到的,查找和结束它与上面的示例非常相似。

Linux杀死进程的10多个用法示例详解

与输出的唯一区别是 shell 通知我们进程已终止。这不是 kill 的一部分,而是在后台运行脚本(本例中为&符号)并连接到启动脚本的同一个 tty 的结果。

$ nohup ./test.sh &

如何在后台运行进程?

Linux杀死进程的方法:kill 命令是一种终止在后台运行的进程的有效方法。你已经在本教程中学习了如何终止进程,但了解如何在后台运行进程是与 kill 命令结合使用的有效组合。

你可以在命令后附加一个与号 (&),以便在后台执行它。这对于需要一段时间执行的命令或脚本很有用,并且你希望在此期间执行其他任务。

Linux杀死进程的10多个用法示例详解

在这里,我们将一个简单的“ls”命令置于后台。由于它是执行时间很少的命令类型,因此我们会得到更多关于它在之后直接完成工作的输出。

我们屏幕截图中的输出显示“完成”,这意味着后台的作业已成功完成。如果你要终止该作业,它将在输出中显示“已终止”。

你还可以通过按键盘上的 Ctrl+Z 将作业移至后台。此屏幕截图中的 ^Z 表示我们按下了 Ctrl+Z 并且 test.sh 脚本移到了后台。

Linux杀死进程的10多个用法示例详解

通过发出 ps 命令,你可以看到 test.sh 继续在后台运行,如下Linux杀死进程示例代码。

$ ps -e | grep test.sh
Linux杀死进程的10多个用法示例详解

使用屏幕命令

在后台运行进程的另一种方法是使用“screen”命令。这通过创建基本上相当于一个单独的终端窗口(或屏幕以及名称)来实现。

Linux如何杀死进程?你创建的每个屏幕都有其进程 ID,这意味着它是创建后台进程的一种有效方式,这些进程可以在以后使用 kill 命令终止。

默认情况下,并非所有 Linux 安装都附带 Screen 命令,因此你可能必须安装它。

在基于 Ubuntu 和 Debian 的发行版上,你可以使用以下命令安装它:

$ sudo apt-get install screen

安装 screen 命令后,只需键入“screen”即可创建新会话:

$ screen

但是,在此之前,最好养成为屏幕指定名称的习惯。这样,以后就可以轻松查找和识别它们。指定名称所需的只是 -S 开关。

$ screen -S my-screen-name

让我们制作一个名为“testing”的屏幕,然后尝试使用“kill”命令来终止它。我们是这样开始的:

Linux杀死进程的10多个用法示例详解

输入此命令并按回车键后,我们会立即进入新创建的屏幕。你可以在此处启动你希望在后台运行的进程。

如果你通过 SSH 连接到服务器并且需要一个进程在断开连接后继续运行,这将特别方便。

在你的命令/脚本运行时,你可以通过按 Ctrl+A 和 D(在按 D 键之前释放 Ctrl 和 A 键)来断开与屏幕的连接。

Linux杀死进程的10多个用法示例详解

如你所见,一旦我们分离屏幕, screen 命令就列出了进程 ID。当然,我们可以使用 kill 命令终止这个屏幕(以及在其中运行的命令/脚本)。

你可以使用以下命令轻松查找屏幕会话的进程 ID:

$ screen -ls
Linux杀死进程的10多个用法示例详解

如果我们没有使用 -S 开关命名我们的屏幕会话,则只会列出进程 ID 本身。要重新附加到列出的任何屏幕,你可以使用 -r 开关:

$ screen -r name-of-screen

或者

$ screen -r PID
Linux杀死进程的10多个用法示例详解

在下面的屏幕截图中,我们正在终止我们创建的 screen 会话(以及其中正在运行的任何内容),然后发出另一个 screen -ls 命令以验证该进程确实已经结束。

Linux杀死进程的10多个用法示例详解

Linux杀死进程用法示例:如何杀死后台进程?

在上一节中的一个示例中,我们将 tesh.sh 脚本置于后台运行。大多数后台进程,尤其是简单的命令,将毫不费力地终止。

但是,就像任何进程一样,后台进程可能会拒绝轻松关闭。我们的 test.sh 脚本的 PID 为 2382,因此我们将发出以下Linux杀死进程示例代码:

$ kill 2383

但是,在屏幕截图中,你会注意到脚本忽略了我们的 kill 命令:

Linux杀死进程的10多个用法示例详解

正如我们已经了解到的,kill -9 是杀死挂起或拒绝终止的进程的最佳方法。

Linux杀死进程的10多个用法示例详解

Linux杀死进程的方法:如何杀死停止的进程?

如果它们已经累积并且对你不再有用,则立即杀死所有停止的后台作业会很有用。例如,我们在后台运行 test.sh 脚本的三个实例,它们已被停止:

$ ./test.sh &
Linux杀死进程的10多个用法示例详解

你可以使用 ps 命令查看这些进程:

$ ps -e | grep test.sh
Linux杀死进程的10多个用法示例详解

或者,要获取系统上所有已停止作业的列表,你可以运行 jobs 命令:

$ jobs
Linux杀死进程的10多个用法示例详解

Linux如何杀死进程?杀死所有已停止作业的最简单方法是使用以下命令:

$ kill `jobs -ps`

或者使用 -9 开关确保作业立即终止:

$ kill -9 `jobs -ps`
Linux杀死进程的10多个用法示例详解

`jobs -ps` 命令将列出在后台运行的所有作业的 PID,这就是为什么我们能够将其输出与 kill 命令结合以结束所有停止的进程。

Linux杀死进程用法示例:不允许执行终止操作

如果你在尝试终止进程时收到“不允许操作”的错误消息,那是因为你没有适当的权限。在执行 kill 命令之前登录到 root 帐户或使用“sudo”(在 Debian 发行版上),如下Linux杀死进程示例代码。

$ sudo kill PID
Linux杀死进程的10多个用法示例详解

我希望你觉得本教程有用。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: