一个专业运
维技术分享!

在Linux上杀死或终止进程的3种简便方法

今天,我们将讨论一个相关主题,它将帮助您杀死或终止挂起的或无响应的程序。

基本上,您为什么要取消一个进程?

当您完成作业或关闭应用程序时,正在运行的进程或程序或实例将自动关闭,而不会出现任何问题。

在某些情况下,如果进程挂起或不响应,则您必须手动终止该进程,因为没有其他方法可以关闭它。

为此,您需要获取正在运行的程序的进程ID。

可以使用以下三种方法来实现。

杀死命令
pkill命令
killall命令

以下是杀死进程的通用语法。

[command] [signal] [PID]

Details:
--------
Command: It could be kill or pkill or killall
Signal:  SIGKILL (9) or SIGTERM (15)
PID:     Name of the process

在测试之前,我们首先需要了解信号,这将有助于我们使用kill命令使用正确的信号。

kill命令提供了64种信号,但是我们仅讨论64种信号中的两种SIGKILL & SIGTERM,它们允许用户将指定的信号发送到指定的进程或进程组。

运行以下命令以查看信号类型。

# kill -l

1) SIGHUP                2) SIGINT                  3) SIGQUIT                 4) SIGILL                  5) SIGTRAP
6) SIGABRT              7) SIGBUS                  8) SIGFPE                   9) SIGKILL              10) SIGUSR1
11) SIGSEGV             12) SIGUSR2              13) SIGPIPE              14) SIGALRM           15) SIGTERM
16) SIGSTKFLT          17) SIGCHLD             18) SIGCONT            19) SIGSTOP            20) SIGTSTP
21) SIGTTIN              22) SIGTTOU             23) SIGURG              24) SIGXCPU            25) SIGXFSZ
26) SIGVTALRM        27) SIGPROF             28) SIGWINCH         29) SIGIO                 30) SIGPWR
31) SIGSYS                34) SIGRTMIN          35) SIGRTMIN+1      36) SIGRTMIN+2     37) SIGRTMIN+3
38) SIGRTMIN+4      39) SIGRTMIN+5      40) SIGRTMIN+6      41) SIGRTMIN+7     42) SIGRTMIN+8
43) SIGRTMIN+9      44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12   47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9       56) SIGRTMAX-8      57) SIGRTMAX-7
58) SIGRTMAX-6      59) SIGRTMAX-5      60) SIGRTMAX-4       61) SIGRTMAX-3      62) SIGRTMAX-2
63) SIGRTMAX-1      64) SIGRTMAX

SIGKILL (9): SIGKILL指的是Kill信号,该信号立即终止或终止进程,并且该信号无法捕获或忽略,因此它是最后一次尝试的信号。

SIGTERM (15): SIGTERM是指终止信号,这是停止过程的一种好方法,但也可以被过程捕获,解释或忽略。

要终止进程,您需要找到进程的PID。运行以下命令之一以获取进程的进程ID(PID)。

# pidof apache2
or
# pgrep apache2
or
# pstree -p | grep "apache2"
or
# ps aux | grep "apache2"

方法1:如何使用kill命令在Linux上终止或终止进程

kill命令允许用户停止进程。kill命令将特定信号发送到特定进程或进程组。如果未指定任何信号,则发送TERM信号,并且TERM信号会破坏不捕获该信号的进程。

为了证明这一点,我们将apache2使用pstree命令找到进程PID。

# pstree -p | grep apache2 | head -5
|-apache2(29554)-+-apache2(29555)
|                |-apache2(29556)
|                |-apache2(29557)
|                |-apache2(29558)
|                `-apache2(29559)

上面的输出显示Apache2进程正在使用29533PID 运行,并且我们将使用kill命令停止该进程。

运行以下命令之一,以使用kill命令终止关联的进程ID。

# kill --verbose 29554
or
# kill -9 29554

Sending signal 15 to pid 29554

或者,您可以使用进程名称而不是进程ID来执行此操作。

# kill --verbose apache2
or
# kill -9 apache2

Sending signal 15 to pid 19669

一旦执行kill命令,就可以通过再次运行pstree命令来检查进程是否已经停止。

# pstree -p | grep apache2

是的,此操作已成功终止,因为我们看不到Apache2进程的任何进程ID。

方法2:如何使用pkill命令在Linux上终止或终止进程

pkill代表进程终止,它是一个命令行实用程序,允许用户通过PID或进程名称在Linux上终止或终止进程。

记下便会杀死所有与进程名称匹配的进程。这允许扩展正则表达式模式和其他适用标准。

为了证明这一点,我们将MySql使用pstree命令找到进程PID。

# pstree -p | grep mysql | head -5
|-mysqld(3861)-+-{mysqld}(3862)
|              |-{mysqld}(3863)
|              |-{mysqld}(3864)
|              |-{mysqld}(3865)
|              |-{mysqld}(3866)

上面的输出显示MySql进程正在使用3861PID 运行,并且我们将使用pkill命令终止该进程。

运行以下命令,使用pkill命令杀死关联的进程ID。

# pkill -e mysql

mysqld killed (pid 3861)

细节:

-e, --echo: 它显示了什么被杀死

一旦执行了pkill命令,就可以通过再次运行pstree命令来检查进程是否已经停止。

# pstree -p | grep mysql

是的,此操作已成功终止,因为我们看不到MySql进程的任何进程ID。

您还可以使用Pkill命令杀死指定用户的进程。以下输出显示了Apache 2进程的列表,包括父进程ID(PPID)和子进程ID。为了测试这一点,我们将杀死root用户Apache2进程ID。请参见下面的输出。

# ps aux | grep apache2

root       822  1.5  1.3 302680 27452 ?        Ss   15:39   0:00 /usr/sbin/apache2 -k start
www-data   823  0.0  0.4 302704  8156 ?        S    15:39   0:00 /usr/sbin/apache2 -k start
www-data   824  0.0  0.4 302704  8156 ?        S    15:39   0:00 /usr/sbin/apache2 -k start
www-data   825  0.0  0.4 302704  8156 ?        S    15:39   0:00 /usr/sbin/apache2 -k start
www-data   826  0.0  0.4 302704  8156 ?        S    15:39   0:00 /usr/sbin/apache2 -k start
www-data   827  0.0  0.4 302704  8156 ?        S    15:39   0:00 /usr/sbin/apache2 -k start
root       829  0.0  0.0  12784  1020 pts/0    S+   15:39   0:00 grep apache2

在上面的输出中,Apache2进程之一属于root用户,其余进程绑定到www-data用户。我们只会杀死root用户Apache2进程。

# pkill -e -u root apache2

apache2 killed (pid 822)

是的,它只会杀死root用户进程。

方法3:如何使用killall命令在Linux上终止或终止进程

Killall命令允许用户使用进程名称而不是PID轻松停止进程。这是kill命令的一个很好的选择,因为您不需要找到PID。

为了证明这一点,我们将fail2ban使用pstree命令找到进程PID。

# pstree -p | grep fail2ban

|-fail2ban-server(19099)-+-{fail2ban-server}(19100)
|                        |-{fail2ban-server}(19101)
|                        |-{fail2ban-server}(19102)
|                        `-{fail2ban-server}(19104)

上面的输出显示fail2ban进程正在使用19099PID 运行,我们将使用killall命令终止该进程。

运行以下命令以使用killall命令杀死关联的进程ID。

# killall -v fail2ban-server

Killed fail2ban-server(19099) with signal 15

细节:

-v, --verbose: 它报告信号是否成功发送。

一旦执行killall命令,就可以通过再次运行pstree命令来检查进程是否已停止。

# pstree -p | grep fail2ban

是的,此操作已成功终止,因为我们看不到fail2ban进程的任何进程ID。

您也可以使用killall命令杀死指定用户的进程。

# killall -v -u root fail2ban-server

或者,您可以使用killall命令杀死指定的组进程。

# killall -e -g root apache2

方法4:如何使用shell脚本在Linux上终止或终止多个进程

如果要在Linux上同时查找并杀死多个进程,请使用以下小型bash脚本。

使用下面的Shell脚本获取给定进程的父进程ID。为了证明这一点,我们添加了httpd,crond和Firewalld进程,您可以将它们替换为您的进程名称。

# vi /opt/script/print-process-id.sh

for pro in httpd crond firewalld
do
pgrep $pro | head -1
done

运行上述命令后,将获得结果以及给定进程的相应PPID。

# sh /opt/script/print-process-id.sh

9281
639
3361

该脚本与上面的脚本相似,但是它也可以杀死给定的进程。使用以下Shell脚本在Linux上同时杀死多个进程。

# vi /opt/script/kill-process-id.sh

for pro in httpd crond firewalld; do pgrep $pro; done
do
pro1=`pgrep $pro | head -1`
echo $pro1
kill -9 $pro1
done

最后运行shell脚本将其杀死。

# sh /opt/script/kill-process-id.sh

历史上的今天
January
16
    哇哦~~~,历史上的今天没发表过文章哦
赞(4) 打赏
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。小柳实验室 » 在Linux上杀死或终止进程的3种简便方法

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏