<分区>
出于学习目的,我希望像这样更改一个不间断的脚本:
#!/bin/env bash
while true; do
sleep 3
echo 1 >> /tmp/log
done
我知道 Linux 会将最近的文件加载到内存中,所以我猜这就是我不能简单地将 echo 1 >>/tmp/log
更改为 的原因echo 2 >>/tmp/log
并保存脚本以查看结果。
所以我更改了脚本:
#!/bin/env bash
CMD="$0 $@"
handleSigHup() {
echo "Receive single SIGHUP, reloading..."
exec $CMD
}
trap 'handleSigHup' SIGHUP
while true; do
sleep 3
echo 2 >> /tmp/log
done
现在我可以使用 kill -HUP
查看 /tmp/log 输出:
1
1
1
2
2
2
2...
这是我的问题:
我的猜测对吗?如果是这样,我可以更改某种系统变量以关闭缓冲并使其正常工作吗?
我上面的代码只能运行一次,当我将脚本更改为
echo 3 >>/tmp/log
并再次使用kill -HUP
时,它成功了没有按预期输出3
,为什么?
谢谢大家!