linux | kill命令详解以及linux中的信号

2023-04-12 13:35:49 浏览数 (2)

1. 简介#

kill命令很容易让人产生误解, 以为仅仅是用来终止linux中的进程.

在man手册中对kill命令的解释如下, 不难看出, kill命令是一个用于将指定的signal发送给进程的工具

DESCRIPTION The command kill sends the specified signal to the specified process or process group. If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal. For other processes, it may be necessary to use the KILL (9) signal, since this signal cannot be caught. Most modern shells have a builtin kill function, with a usage rather similar to that of the command described here. The ‘-a’ and ‘-p’ options, and the possibility to specify processes by command name are a local extension. If sig is 0, then no signal is sent, but error checking is still performed.

命令格式

代码语言:javascript复制
kill [-s signal|-p] [-q sigval] [-a] [--] pid...

常用参数

代码语言:javascript复制
-l      # 列出所有支持的signal
-s NAME # 使用NAME指定signal
-NUM    # 使用编号指定signal

kill -s HUP 和 kill -1 效果一样

2. 支持的信号#

代码语言:javascript复制
[root@lvbibir ~]# 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支持的信号非常多, 在这些信号中只有9) SIGKILL可以无条件地终止process, 其他信号都将依照process中定义的信号处理规则来进行忽略或者处理.

上述信号中常用的其实很少, 如下表所示

编号

名称

解释

1

SIGHUP

启动被终止的程序, 也可以让进程重新读取自己的配置文件, 类似重新启动

2

SIGINT

相当于输入 ctrl-c 来中断一个程序

9

SIGKILL

强制中断一个程序, 不会进行资源的清理工作. 如果该程序进行到一半, 可能会有半成品产生, 类似 vim 的 .filename.swp 保留下来

15

SIGTERM

以正常(优雅)的方式来终止进程, 由程序自身决定该如何终止

19

SIGSTOP

相当于输入 ctrl-z 来暂停一个程序

3. 常用命令#

以正常的方式终止进程, 由于信号15是最常用也是最佳的程序退出方式, 所以 kill 命令不指定信号时, 默认使用的就是信号 15

代码语言:javascript复制
kill pid
# 或者
kill -15 pid

强制终止进程

代码语言:javascript复制
kill -9 pid

0 人点赞