你是否曾经遇到过启动应用程序,而在使用该应用程序时突然变得无响应并意外崩溃的情况?你尝试再次启动该应用程序,但没有任何反应,因为原始应用程序进程从未真正完全关闭。
普通用户可以杀死自己的进程,但不能杀死属于其他用户的进程,而root用户可以杀死所有进程。
系统kill信号
kill
和killall
可以将给定信号发送到指定的进程或进程组。当没有指定信号时,两个工具都会发送-15
(-TERM)。
最常用的信号是:
-
1
(-HUP):重新启动进程。 -
9
(-KILL):杀死一个进程。 -
15
(-TERM):正常停止进程。
可以通过三种不同的方式指定信号:
-
使用带有 SIG
前缀(例如-SIGHUP) -
使用数字(例如-1) -
不带 SIG
前缀(例如-HUP) 。
使用
-l
选项列出所有可用信号:
kill -l # or killall -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
使用kill
命令终止进程
要使用
kill
命令终止进程,首先需要找到进程PID。你可以使用不同的命令来执行此操作,例如top
,ps
,pidof
和pgrep
。
假设我们的Firefox浏览器已无法响应,你需要取消Firefox进程。要找到过程PID,请使用
pidof
命令:
pidof firefox
以上命令将显示所有Firefox进程:
2551 2514 1963 1856 1771
一旦你知道Firefox处理PID以终止所有PID,请输入:
kill -9 2551 2514 1963 1856 1771
使用killall
命令终止进程
killall
命令终止与指定名称匹配的所有程序。
使用与之前相同的方案,我们可以通过键入以下命令来终止Firefox进程:
killall -9 firefox
killall
接受几个选项,例如指定使用用户身份运行的进程,使用正则表达式以及根据创建时间终止进程。你可以通过键入killall
(不带任何参数)来获得所有选项的列表。
例如,如果我们要终止以用户身份运行的所有进程
rumenz
,则可以运行以下命令:
killall -u rumenz
杀死运行时间超过 5h 的进程
killall -o 5h
杀死进行时间小于 4h 的进程
killall -y 4h
默认情况下,killall 命令是大小写敏感的,所以我们如果写错大小写,将无法正确杀死进程。
killall -I NGINX
等待直到某个进程被终止,可以使用
-w
选项,其中 w 代表 wait
killall -w
使用pkill
命令终止进程
pkill使用正则表达式来匹配进程名称。
ps -eo pid,cmd | grep ssh
1039 sshd
2257 ssh-agent
6850 ssh
31279 ssh-agent
通过正则批量关闭
pkill '^ssh$'