点击访问 Linux 命令大全 >>
Linux 的 kill 命令从名称来看,它是用来“杀死”一个进程。事实上,kill 命令只是用来向进程发送一个信号(通知进程进行一些列的操作),至于发送的信号是什么,则是由使用它的用户指定。
kill [信号] [PID]
参数说明:
-l:列出系统支持的信号
-s:指定向进程发送的信号
-a:处理当前进程时不限制命令名和进程号的对应关系
-p:指定 kill 命令只打印相关进程的进程号,而不发送任何信号
kill 命令常用信号,如下表:
信号编号 | 信号名 | 描述 | 默认情况下执行的操作 |
0 | EXIT | 程序退出时收到该信号 | 终止 |
1 | HUP | 挂起 | 终止 |
2 | INT | 终端 | 终止 |
3 | QUIT | 退出 | 终止 |
9 | KILL | 杀死 | 终止 |
11 | SEGV | 段错误 | 终止 |
15 | TERM | 软件终止 | 终止 |
取决于硬件体系 | USR1 | 用户定义 | 终止 |
取决与硬件体系 | USR1 | 用户定义 | 终止 |
注意:信号名的前缀 SIG 是可以省略的。也就是说,SIGTERM 和 TERM 两种写法对 kill 命令效果一样。
默认情况下,kill 命令向进程发送 TERM 信号,这个信号表示请求终止某项操作。下面三个命令含义时一致的:
kill 1209; kill -TERM 1209; kill -SIGTERM 1209;
使用 kill 命令是否一定可以终止一个进程呢?答案是否定的。既然 kill 命令向进程发送一个信号,那么这个信号就应该由进程捕获,进行处理。当然,程序也可以封锁或忽略捕获到的信号;只有当信号被进程封锁了,系统才会执行默认操作。
在 shell 脚本中,可以通过“trap "" TERM”语句忽略 TERM 信号。
虽然我们可以通过上面语句忽略 TERM 信号,但 KILL 信号永远不能被程序捕获。KILL 可以在内核级别杀死一个进程,在绝大多数下,下面这些命令可以确保结束进程号为PID的进程。例如:
sudo kill -KILL pid sudo kill -SIGKILL pid sudo kill -9 pid
实际上面三个命令含义是一样的,仅仅写法不同而已。
(1)使用 kill -l 查看当前系统支持的信号列表,例如:
[hxstrive@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
(2)使用 kill -KILL ppid 命令强制结束 vim 进程。例如:
# 查看 vim 进程的 PID [root@localhost hxstrive]# ps aux | grep vim hxstrive 17952 0.0 0.1 149608 5436 pts/1 S+ 21:05 0:00 vim hello.txt root 18105 0.0 0.0 112808 972 pts/0 R+ 21:06 0:00 grep --color=auto vim # 强制结束 vim 进程 [root@localhost hxstrive]# kill -KILL 17952 # 验证结果 [root@localhost hxstrive]# ps aux | grep vim root 18131 0.0 0.0 112808 972 pts/0 R+ 21:07 0:00 grep --color=auto vim