帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何在Linux系统中使用命令终止无响应进程

如何在Linux系统中使用命令终止无响应进程

发布时间:2020年04月18日 11:38:44    来源: A5互联

有多种工具可用于从命令行终止无响应或挂起的进程,包括kill,pkill和killall。这些命令通过向这些无响应的进程发送特定信号来工作。您将需要进程ID或PID信息,以便可以向他们发送所需的终止信号。

您可以使用命令来检索无响应进程的PPID(如何使用命令获取Linux进程的PID?)。一旦获得此信息,就该彻底终止它。有几个命令允许我们执行此操作,例如kill,pkill和killall。我们将在以下各节中逐一介绍它们的工作方式。

方法1:使用kill命令

由于kill命令的简单性和鲁棒性,它被Linux管理员广泛使用。它需要过程的PID和信号。内核根据该信号终止/停止进程的执行。您可以使用下一个命令查看kill命令的所有可用信号。

$ kill -l

如您所见,kill提供了64种不同的信号。但是,本指南仅讨论其中两个。它们是信号9(SIGKILL)和信号15(SIGTERM)。信号或信号15是消除无响应进程的安全方法。另一方面,SIGKILL或信号9强行终止Linux进程。

$ kill -9 8631

$ kill -KILL 8631

上面的命令是等效的,它们将强制终止具有PID 8631的进程。这就是我系统中进程“ nano”的PPID。将其替换为系统中无响应进程的PID。

$ kill -15 8631

$ kill -TERM 8631

上面的命令也是等效的,可以正常终止进程。这就是为什么要花一些时间才能终止该过程。此外,如果进程由另一个用户拥有,则可能需要在kill命令之前附加sudo。

方法2:使用pkill命令

pkill命令是Linux中功能最丰富的进程管理命令之一。它使我们能够根据其名称,PID,所有者和其他运行时属性来取消无响应的进程。对于入门用户或不熟悉许多标准终端命令的用户来说,这是一个完美的工具。

$ pkill nano

$ pkill 8631

$ pkill -e nano

$ pkill -f nano

您可以使用上述任何pkill命令来终止Linux中的僵尸/无响应进程。如果要确认Linux Kill作业,请使用-e选项。pkill命令还允许用户发送特定的终止信号。

方法3:使用killall命令

killall命令允许用户根据其名称终止无响应的进程。它更易于使用,但如果不谨慎,可能会造成麻烦。由于killall会根据名称终止进程,因此总是有机会最终偶然终止进程。例如,如果系统中有可用的nano的不同版本,则第一个示例将终止所有这些版本。

$ killall nano

$ killall --verbose nano

$ killall --interactive nano

$ killall --signal KILL nano

第一个示例显示了Linux中killall命令的基本用法。第二个命令将报告终止作业是否成功,第三个命令将在终止过程之前要求用户确认。默认情况下,killall使用SIGTERM信号终止进程。但是,您可以手动指定信号,如上例所示。

方法4:使用方便的单行

Linux的真正魅力在于,它允许用户根据自己的需求创建复杂的命令组合。

$ nano > /dev/null &

$ kill -9 $(pgrep nano)

$ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9

在第一个示例中,我们使用了shell插值将进程“ nano”的PID传递给Linux kill命令。第二个示例利用几个日常终端命令和I / O重定向来终止该过程。

方法5:使用Linux Shell脚本终止多个进程

有时,用户可能希望终止多个过程。我们可以通过编写简单的shell脚本轻松地自动化这些任务。如果您对此主题感兴趣,请查看我们先前关于Linux Shell脚本的指南。以下脚本将检索您要终止的进程的PPID,然后使用终止信号终止它们。

$ nano proc-killer.sh

#!/usr/bin/env bash


for pro in "$@"

do

pid=$(pgrep $pro | head -1)

echo $pid


comm="kill -9 $pid"

eval $comm

done

现在,保存该文件并通过发出以下命令来添加执行权限。

$ chmod +x proc-killer.sh

现在,您可以向该脚本传递要终止的进程的名称。

$ ./proc-killer.sh nano gedit vlc

只需将参数替换为系统中无响应Linux进程的名称。