Kill
一.命令介绍
先使用帮助文档查看命令的信息
NAME
kill - terminate a process
kill
命令的主要功能就是向进程发送信号,这里我们主要用来终止结束进程的,与它的英文单词含义相同,在Linux系统中如果需要不使用某个进程,可以使用此命令立刻结束进程,当然也可使用service
或systemctl
管理命令stop
(停止)服务。
二. 命令语法
此命令的基本语法是:kill 【参数】【进程号】
SYNOPSIS
kill [-s signal|-p] [-q sigval] [-a] [–] pid…
kill -l [signal]
三. 基本参数
1.命令的常用参数
以表示形式显示
-l | 列出系统支持的信号 |
-s | 指定向进程发送的信号 |
-a | 不限制命令和进程号的对应关系 |
-p | 不发送任何信号 |
kill常用信号的含义
使用kill -l
显示所有信号
[root@localhost ~]# 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
通过上图能看到kill能支持的信号真的很多,但基本上我们用不到那么多信号,以下这些是较为常用的。
1)SIGHUP | 重新加载进程 |
2)SIGINT | 将进程中断,类似ctrl+c快捷键 |
3)SIGQUIT | 退出进程 |
9)SIGKILL | 强制结束进程,非必要情况下不建议使用,因有可能强制结束会导致数据出现丢失,或终端无法恢复到支持状态 |
15)SIGTERM | 正常结束进程,是kill命令的默认指令 |
四. 参考实例
1.结束MySQL进程
我们使用·top
、ps
或者netstat
查看MySQL
的进程PID
,直接正常结束进程。
[root@localhost ~]# netstat -antp | grep mysqld
tcp6 0 0 :::3306 :::* LISTEN 4561/mysqld
[root@localhost ~]# ps -ef | grep mysql
mysql 4561 1 0 14:43 ? 00:00:01 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root 55203 2853 0 15:23 pts/1 00:00:00 grep --color=auto mysql
[root@localhost ~]# kill 15 4561
[root@localhost ~]# ps -ef | grep mysql
root 55242 2853 0 15:24 pts/1 00:00:00 grep --color=auto mysql
[root@localhost ~]# netstat -antp | grep mysqld
可以看到服务进程已经结束,如果还不确定服务是否已经关闭,也可使用systemctl
查看服务状态。
[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 三 2023-03-08 15:25:43 CST; 5s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 55384 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 55361 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 55387 (code=exited, status=0/SUCCESS)
3月 08 15:25:26 localhost.localdomain systemd[1]: Starting MySQL Server...
3月 08 15:25:27 localhost.localdomain systemd[1]: Started MySQL Server.
2.强制结束进程
可以在kill
后面加上-9
参数,彻底结束不用的进程。
kill -9 55790
五. kill的扩展命令
kill
命令还有其他与之相似的命令,如:pkill
、killall
,下面一起来看下这些命令的使用。这里就简单的写下这些扩展命令如何使用。
1. pkill
pkill命令:process kill,主要功能是根据进程名结束指定进程
> 用法:pkill 【参数】进程名
> 常用的命令参数
> -P: 指定父进程号
> -g: 指定进程组
> -t: 指定开启进程的终端
> -u: 结束指定用户的进程
> 例子:pkill prometheus #直接pkill在后面加进程名删除
> 例子:pkill -u host #根据拥有者终止进程
2. killall
killall命令:Kill all,主要功能是通过名称来结束进程,说到前面的kill命令只能一个一个的关闭进程与它的子进程,这样就太繁琐了,这个killall命令只要给它一个要关闭的服务名,就会自动找到对应的全部进程信息,并且直接关闭,这个命令能实现的功能有很多,一起来看下
> 语法格式:killall 【参数】名称
> 常用的命令参数
> -e: 对长名称进行精确匹配
> -l : 打印所有已知的信号列表
> -p: 结束进程所属的进程组
> -i : 交互式结束进程,结束进程前需要进行确认
> -r : 使用正则表达式匹配要结束的进程名称
> -s : 用指定的进程号代替默认型号"SIGTERM"
> -u : 结束指定用户的进程
>
> 例子:[root@localhost ~]# killall -i vim #交互式确认是否结束
杀死 vim(55790) ? (y/N) y
[root@localhost ~]# killall httpd #指定服务结束所有进程
[root@localhost ~]# killall -l #显示所有已知的信号列表
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
总结
kill命令的用处实际就是用来结束某一个进程的,若不想使用进程,用这个命令就对了,若觉得内容还行的,可以点赞支持一下!