在Linux上杀死或终止进程的3种简便方法
在上一篇文章中,我们解释了如何在Linux中查找进程ID(PID或PPID)。
今天,我们将讨论一个相关主题,它将帮助您杀死或终止挂起的或无响应的程序。
基本上,您为什么要取消一个进程?
当您完成作业或关闭应用程序时,正在运行的进程或程序或实例将自动关闭,而不会出现任何问题。
在某些情况下,如果进程挂起或不响应,则您必须手动终止该进程,因为没有其他方法可以关闭它。
为此,您需要获取正在运行的程序的进程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
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任