Linux 向进程发送信号

点击访问 Linux 命令大全 >>

Linux 的 kill 命令从名称来看,它是用来“杀死”一个进程。事实上,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
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号