为什么脚本中kill进程之后需要进行sleep?

目录

前言

我们在一些重启脚本中,经常可以看到在kill进程之后,会sleep一段时间,这是为什么呢?下面,就让我们来研究一下


原因

我们知道kill命令是发送指定的信号到相应进程,kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。我们常用是15(SIGTERM)和9(SIGKILL),没有信息编号,默认是15

9和15的意思:

9 (KILL):杀死一个进程,强行终止一个进程,这可能会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。

15 (TERM):正常停止一个进程,这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源,相当于让进程正常终止。

由此,我们可以推断出kill进程并不是立即生效的,而是具有一定延时的。

在所有kill信号中,除了9无条件终止进程之外,其他信号都有可能被阻塞或者忽略,而且就算是信号9,也会先被放到pending队列,等到下一次cpu调度才会生效,所以一般我们kill进程之后会sleep一会,保证进程被杀死,否则可能会出现进程未被杀死而导致重启失败。

额外:我们可以使用kill -l 查看所有的kill信号值

 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	

猜你喜欢

转载自blog.csdn.net/qq_36551991/article/details/109825755