请教while保持程序运行问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
tunx0000
帖子: 12
注册时间: 2018-01-05 16:26
系统: Bodhi

请教while保持程序运行问题

#1

帖子 tunx0000 » 2018-08-10 10:20

代码: 全选

while top;do
	echo "some" > /dev/null
done
pkill top后会再重新运行top.自己写了一个脚本:

代码: 全选

vim /usr/bin/test.bash
while : ;do
	echo "some"
	sleep 2
done
然后,把test.bash放入while:

代码: 全选

while test.bash;do
	echo "some" > /dev/null
done
pkill test.bash后test.bash不再重启.
能指点下原因么?谢谢
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: 请教while保持程序运行问题

#2

帖子 astolia » 2018-08-10 12:52

这个涉及到linux的信号处理机制。如果没学过可以读读 http://c.biancheng.net/cpp/html/2784.html 有个简单的了解。

用pkill默认发送的信号是SIGTERM,从上面的链接里可以看到,程序接收到这个信号是可以做一些事情的。而top和执行test.bash的shell对SIGTERM的处理方式不同,退出码不一样,所以一个会退出循环而另一个不会。

你可以换用其他信号,比如SIGKILL,也就是pkill -9 xxxx这样测试,两者就都会终止循环
或者你在test.bash里最开头加一句

代码: 全选

trap "exit 0" 15
那么脚本收到SIGTERM也不会终止循环
tunx0000
帖子: 12
注册时间: 2018-01-05 16:26
系统: Bodhi

Re: 请教while保持程序运行问题

#3

帖子 tunx0000 » 2018-08-10 14:35

@astolia
谢谢
回复