在本教程中,我们将通过多个示例讨论在 Linux 中杀死进程。在大多数情况下,它就像键入“kill”命令后跟进程 ID(通常缩写为 PID)一样简单。
文章图片
如上Linux杀死进程用法示例,我们杀死了一个 ID 为 1813 的进程。
Linux如何杀死进程?如果你是 Windows 用户,将“kill”命令视为 Linux 中Windows 任务管理器中的“结束任务”按钮可能会有所帮助。
Linux杀死进程的方法和教程目录
- 列出正在运行的进程
- 通过PID杀死进程
- kill 命令发送的默认信号
- 强行关闭
- 如何按名称杀死所有进程?
- 如何杀死用户的所有进程?
- 如何杀死 nohup 进程?
- 如何在后台运行进程?
- 使用屏幕命令
- 如何杀死后台进程?
- 如何杀死停止的进程?
- 不允许执行终止操作
ps -e | grep name-of-process
在下面的屏幕截图中,我们检查系统上是否正在运行 SSH。
文章图片
这也为我们提供了 SSH 守护进程的 PID,即 1963。
如果你想一一查看系统正在运行的进程,请使用“更多”管道。
文章图片
你还可以使用“top”命令来查看正在运行的进程列表。这很有用,因为它会显示每个进程正在使用多少系统资源。
文章图片
Linux如何杀死进程?资源的 PID、用户和名称都在此处标识,如果你决定稍后终止这些服务中的任何一个,这将非常有用。
请注意 %CPU 和 %MEM 列,因为如果你发现一个不重要的进程正在消耗宝贵的系统资源,那么杀死它可能会有所帮助!
获取相应进程 ID 的另一个非常有效的方法是使用“pgrep”命令。你需要提供的唯一参数是正在运行的进程的名称(或名称的一部分)。
这是我们搜索 SSH 时的样子。如你所见,它返回进程 ID 2506。
文章图片
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如何杀死进程?总是在 kill 命令上附加 -9 开关可能很诱人,因为它总是有效。但是,这不是推荐的最佳实践。你应该只在挂起并拒绝正常关闭的进程上使用它。
如果可能,请使用默认的 SIGTERM 信号。从长远来看,这将防止错误,因为它使进程有机会关闭其日志文件,终止任何挥之不去的连接等。
除了 SIGTERM 和 SIGKILL 信号之外,还有许多其他信号可以被 kill 发送到进程,所有这些都可以通过 -l 开关看到。
文章图片
名称旁边的数字是你在“kill”命令中指定的数字。例如,kill -9 是 SIGKILL,就像你在上面的屏幕截图中看到的那样。
对于日常操作,SIGTERM 和 SIGKILL 可能是你永远不需要使用的唯一信号。请记住其他人,以防你遇到奇怪的情况,其中进程建议使用不同的信号终止它。
如何按名称杀死所有进程?你还可以在 pkill 命令中使用正在运行的进程的名称,而不是 PID。但请注意,这将终止以指定名称运行的所有进程,因为 kill 不知道你要终止哪个特定进程。
$ pkill name-of-process
Linux杀死进程的方法:看看下面的例子,我们用一个 pkill 命令终止了五个进程。
文章图片
在本例中,我们只想终止其中一个 screen 会话;有必要指定 PID 并使用正常的“kill”命令。否则,无法唯一指定我们希望结束的进程。
如何杀死用户的所有进程?你还可以使用 pkill 命令终止由Linux 用户运行的所有进程。首先,要查看在特定用户下运行的进程,请使用带有 -u 开关的 ps 命令。
$ ps -u username
文章图片
该屏幕截图向我们显示当前有五个服务在用户“geek”下运行。如果你需要快速终止所有这些,你可以使用 pkill 来完成。
$ pkill -u username
文章图片
Linux杀死进程用法示例:如何杀死 nohup 进程?你可以像任何其他正在运行的进程一样终止 nohup 进程。请注意,你无法在 ps 命令中 grep 搜索“nohup”,因此你需要使用与上述相同的方法搜索正在运行的进程。
在此示例中,我们找到了一个名为“test.sh”的脚本,该脚本已使用 nohup 命令执行。正如你将看到的,查找和结束它与上面的示例非常相似。
文章图片
与输出的唯一区别是 shell 通知我们进程已终止。这不是 kill 的一部分,而是在后台运行脚本(本例中为&符号)并连接到启动脚本的同一个 tty 的结果。
$ nohup ./test.sh &
如何在后台运行进程?Linux杀死进程的方法:kill 命令是一种终止在后台运行的进程的有效方法。你已经在本教程中学习了如何终止进程,但了解如何在后台运行进程是与 kill 命令结合使用的有效组合。
你可以在命令后附加一个与号 (& ),以便在后台执行它。这对于需要一段时间执行的命令或脚本很有用,并且你希望在此期间执行其他任务。
文章图片
在这里,我们将一个简单的“ls”命令置于后台。由于它是执行时间很少的命令类型,因此我们会得到更多关于它在之后直接完成工作的输出。
我们屏幕截图中的输出显示“完成”,这意味着后台的作业已成功完成。如果你要终止该作业,它将在输出中显示“已终止”。
你还可以通过按键盘上的 Ctrl+Z 将作业移至后台。此屏幕截图中的 ^Z 表示我们按下了 Ctrl+Z 并且 test.sh 脚本移到了后台。
文章图片
通过发出 ps 命令,你可以看到 test.sh 继续在后台运行,如下Linux杀死进程示例代码。
$ ps -e | grep test.sh
文章图片
使用屏幕命令
在后台运行进程的另一种方法是使用“screen”命令。这通过创建基本上相当于一个单独的终端窗口(或屏幕以及名称)来实现。
Linux如何杀死进程?你创建的每个屏幕都有其进程 ID,这意味着它是创建后台进程的一种有效方式,这些进程可以在以后使用 kill 命令终止。
默认情况下,并非所有 Linux 安装都附带 Screen 命令,因此你可能必须安装它。
在基于 Ubuntu 和 Debian 的发行版上,你可以使用以下命令安装它:
$ sudo apt-get install screen
安装 screen 命令后,只需键入“screen”即可创建新会话:
$ screen
但是,在此之前,最好养成为屏幕指定名称的习惯。这样,以后就可以轻松查找和识别它们。指定名称所需的只是 -S 开关。
$ screen -S my-screen-name
让我们制作一个名为“testing”的屏幕,然后尝试使用“kill”命令来终止它。我们是这样开始的:
文章图片
输入此命令并按回车键后,我们会立即进入新创建的屏幕。你可以在此处启动你希望在后台运行的进程。
如果你通过 SSH 连接到服务器并且需要一个进程在断开连接后继续运行,这将特别方便。
在你的命令/脚本运行时,你可以通过按 Ctrl+A 和 D(在按 D 键之前释放 Ctrl 和 A 键)来断开与屏幕的连接。
文章图片
如你所见,一旦我们分离屏幕, screen 命令就列出了进程 ID。当然,我们可以使用 kill 命令终止这个屏幕(以及在其中运行的命令/脚本)。
你可以使用以下命令轻松查找屏幕会话的进程 ID:
$ screen -ls
文章图片
如果我们没有使用 -S 开关命名我们的屏幕会话,则只会列出进程 ID 本身。要重新附加到列出的任何屏幕,你可以使用 -r 开关:
$ screen -r name-of-screen
或者
$ screen -r PID
文章图片
在下面的屏幕截图中,我们正在终止我们创建的 screen 会话(以及其中正在运行的任何内容),然后发出另一个 screen -ls 命令以验证该进程确实已经结束。
文章图片
Linux杀死进程用法示例:如何杀死后台进程?在上一节中的一个示例中,我们将 tesh.sh 脚本置于后台运行。大多数后台进程,尤其是简单的命令,将毫不费力地终止。
但是,就像任何进程一样,后台进程可能会拒绝轻松关闭。我们的 test.sh 脚本的 PID 为 2382,因此我们将发出以下Linux杀死进程示例代码:
$ kill 2383
但是,在屏幕截图中,你会注意到脚本忽略了我们的 kill 命令:
文章图片
正如我们已经了解到的,kill -9 是杀死挂起或拒绝终止的进程的最佳方法。
文章图片
Linux杀死进程的方法:如何杀死停止的进程?如果它们已经累积并且对你不再有用,则立即杀死所有停止的后台作业会很有用。例如,我们在后台运行 test.sh 脚本的三个实例,它们已被停止:
$ ./test.sh &
文章图片
你可以使用 ps 命令查看这些进程:
$ ps -e | grep test.sh
文章图片
或者,要获取系统上所有已停止作业的列表,你可以运行 jobs 命令:
$ jobs
文章图片
Linux如何杀死进程?杀死所有已停止作业的最简单方法是使用以下命令:
$ kill `jobs -ps`
或者使用 -9 开关确保作业立即终止:
$ kill -9 `jobs -ps`
文章图片
`jobs -ps` 命令将列出在后台运行的所有作业的 PID,这就是为什么我们能够将其输出与 kill 命令结合以结束所有停止的进程。
Linux杀死进程用法示例:不允许执行终止操作如果你在尝试终止进程时收到“不允许操作”的错误消息,那是因为你没有适当的权限。在执行 kill 命令之前登录到 root 帐户或使用“sudo”(在 Debian 发行版上),如下Linux杀死进程示例代码。
$ sudo kill PID
文章图片
我希望你觉得本教程有用。
推荐阅读
- PyQt5教程(Python GUI编程示例和用法)
- NLP教程(Python NLTK用法示例和完整指南)
- expect命令用法示例(如何自动化shell脚本())
- 如何编写实用的shell脚本(bash编程教程)
- Codeforces348B Apple Tree DFS
- 原生APP内置PayPal网页支付方式
- Android中关于Handler Looper理解
- Android 开发第一项目——计算器的开发记录
- Android学习资源网站大全