【Shell脚本】Linux进程间通信机制之信号

文章目录

有时候我们会在终端(当前进程)使用kill -9 pid 的方式杀死进程号为 pid 的进程(其他进程),实际上这就是使用Linux进程间通信机制之一即信号的一种方式,而通过命令kill -ltrap -l可以知道Linux支持的所有类型信号:

[root@CentOS8 ~]# 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

实际上,信号能做的远不止于此,通常我们可以在一个进程中捕获来自另一个进程的信号后在捕获信号的进程中做逻辑处理,而捕获信号使用命令trap

[root@CentOS8 ~]# cat trap_sig.sh 
#!/bin/bash

trap "echo sig 15" 15
trap "echo sig 2" 2

echo $$

while :
do
	:
done
[root@CentOS8 ~]# chmod u+x trap_sig.sh 
[root@CentOS8 ~]# bash trap_sig.sh 
8777
sig 15
sig 2
Killed

上述后面三行依次是使用下列命令后的结果:

[root@CentOS8 ~]# kill -15 8777
[root@CentOS8 ~]# kill -2 8777
[root@CentOS8 ~]# kill -9 8777
上一篇:Linux pkill命令:终止进程,按终端号踢出用户


下一篇:五天完成项目-《基于Linux环境下的Cortex A53的手势识别智能家居》-第四天