Bash while循环中的陷阱信号和清除
我有这个剧本:Bash while循环中的陷阱信号和清除,bash,Bash,我有这个剧本: FINISH=0; trap 'FINISH=1' SIGINT INTERVAL=100; while true do START=`date +%s`; php-cgi -f process.php; STOP=`date +%s`; ELAPSED=$(($STOP-$START)); SLEEP=$(($INTERVAL-$ELAPSED)); if [ $SLEEP -gt 0 ] then e
FINISH=0;
trap 'FINISH=1' SIGINT
INTERVAL=100;
while true
do
START=`date +%s`;
php-cgi -f process.php;
STOP=`date +%s`;
ELAPSED=$(($STOP-$START));
SLEEP=$(($INTERVAL-$ELAPSED));
if [ $SLEEP -gt 0 ]
then
echo "sleeping for $SLEEP seconds";
sleep $SLEEP;
fi
if [ $FINISH -eq 1 ]
then
echo "exit";
break;
fi
done
但它并没有像我希望的那样工作-我希望它只设置FINISH=1,但它会杀死当前执行的命令(php cgi或sleep)-如何避免这种情况?实际上,我不想让它杀死php cgi…这可能对你有用
#!/bin/bash
trap 'exit' SIGINT
interval=100;
while true
do
start=$(date +%s)
nohup php-cgi -f process.php
stop=$(date +%s)
((elapsed = stop - start))
((sleep = interval - elapsed))
if (( sleep > 0 ))
then
echo "sleeping for $sleep seconds"
sleep "$sleep"
fi
done
嗯,这意味着当SIGINT为'cougt'时,脚本将退出,但php cgi将继续,直到完成。是吗?@user606521:这就是想法。