当前位置: 技术问答>linux和unix
关于shell定时器脚本的几个问题(附源代码)
来源: 互联网 发布时间:2016-06-12
本文导语: #!/bin/bash AlarmHandler() { echo "Get SIGALAM,cmd took too long." KillSubProcs exit 14 } KillSubProcs() { kill ${CHPROCIDS:-$!}/////////////////////////////////${CHPROCIDS:-$!}什么意思? if [ $? -eq 0 ];then echo "Sub-process...
#!/bin/bash
AlarmHandler()
{
echo "Get SIGALAM,cmd took too long."
KillSubProcs
exit 14
}
KillSubProcs()
{
kill ${CHPROCIDS:-$!}/////////////////////////////////${CHPROCIDS:-$!}什么意思?
if [ $? -eq 0 ];then echo "Sub-processes killed.";fi
}
SetTimer()
{
DEF_TOUT=${1:-10};//DEF_TOUT变量是系统变量吗?在settimer函数后面加一个参数,这个参数的值就保存在DEF_TOUT里吗
if [ $DEF_TOUT -ne 0 ];then
sleep $DEF_TOUT && kill -s 14 $$ &
CHPROCIDS="$CHPROCIDS $!"
TIMERPROC=$!
fi
}
UnsetTimer()
{
kill $TIMERPROC
}
trap AlarmHandler 14
SetTimer 5
$PROG &//////////////////////////////////PROG是不是shell的系统变量?为什么使用之前没有赋值?
CHPROCIDS="$CHPROCIDS $!"
#wait $!
sleep 8
UnsetTimer
echo "ALL Done."
exit 0
以上是我在学习上面这段代码是的疑惑,请高手出手相助,感激不尽!
AlarmHandler()
{
echo "Get SIGALAM,cmd took too long."
KillSubProcs
exit 14
}
KillSubProcs()
{
kill ${CHPROCIDS:-$!}/////////////////////////////////${CHPROCIDS:-$!}什么意思?
if [ $? -eq 0 ];then echo "Sub-processes killed.";fi
}
SetTimer()
{
DEF_TOUT=${1:-10};//DEF_TOUT变量是系统变量吗?在settimer函数后面加一个参数,这个参数的值就保存在DEF_TOUT里吗
if [ $DEF_TOUT -ne 0 ];then
sleep $DEF_TOUT && kill -s 14 $$ &
CHPROCIDS="$CHPROCIDS $!"
TIMERPROC=$!
fi
}
UnsetTimer()
{
kill $TIMERPROC
}
trap AlarmHandler 14
SetTimer 5
$PROG &//////////////////////////////////PROG是不是shell的系统变量?为什么使用之前没有赋值?
CHPROCIDS="$CHPROCIDS $!"
#wait $!
sleep 8
UnsetTimer
echo "ALL Done."
exit 0
以上是我在学习上面这段代码是的疑惑,请高手出手相助,感激不尽!
|
kill ${CHPROCIDS:-$!}/////////////////////////////////${CHPROCIDS:-$!}什么意思?
CHPROCIDS:自己设置的变量
$!:前面一个进程的PID
${CHPROCIDS:-$!}:如果$CHPROCIDS无赋值,默认值为$!。
DEF_TOUT=${1:-10};//DEF_TOUT变量是系统变量吗?在settimer函数后面加一个参数,这个参数的值就保存在DEF_TOUT里吗
$1:在这里指SetTimer函数的第一个参数
${1:-10}:和前面的一样,如果$1无赋值,默认$1为10。
$PROG &//////////////////////////////////PROG是不是shell的系统变量?为什么使用之前没有赋值?
代码没贴全吧?这个应该是自定义变量,赋值为启动的进程。
CHPROCIDS:自己设置的变量
$!:前面一个进程的PID
${CHPROCIDS:-$!}:如果$CHPROCIDS无赋值,默认值为$!。
DEF_TOUT=${1:-10};//DEF_TOUT变量是系统变量吗?在settimer函数后面加一个参数,这个参数的值就保存在DEF_TOUT里吗
$1:在这里指SetTimer函数的第一个参数
${1:-10}:和前面的一样,如果$1无赋值,默认$1为10。
$PROG &//////////////////////////////////PROG是不是shell的系统变量?为什么使用之前没有赋值?
代码没贴全吧?这个应该是自定义变量,赋值为启动的进程。