shell超時 輸入超時-進程超時
20121031 Chenxin
1.使用多個shell進程的方式
用主程序執行調用子進程1的輸入,然后調用子進程2的時間要求,當時間到達后,子進程2就kill掉子進程1,達到時間限制的效果;
2.使用read的-t參數
cat t.sh
!/bin/bash
echo "input char,in 3 seconds ..."
echo -n "[y/n] default [y]"
read -t 3 n
if [ -z $n ];then
n=y
fi
./t.sh
input char,in 3 seconds ...
[y/n] default [y]n
Your input char is: n
3.使用stty實現超時
stty -icanon min 0 time 100 #set 10seconds,not 100seconds
eval read varname #=read $varname
4.一般的超時(摘自《shell腳本專家指南》P91)
cat t.sh
!/bin/bash
timeout()
{
waitfor= 2
command=$*
$command &
commandpid=$!
#echo "1 commandpid = $commandpid"
(sleep $waitfor; kill -9 $commandpid > /dev/null 2>&1) &
watchdogpid=$!
#echo "2 watchdogpid = $watchdogpid"
sleeppid=`ps $watchdogpid |awk '{ print $1}'`
#echo "3 sleeppid = $sleeppid"
wait $commandpid
#echo "4 commandpid = $commandpid"
kill $sleeppid > /dev/null 2>&1
#echo "5 sleeppid = $sleeppid"
}
timeout ping 114.112.69.113 -c 5
程序執行ping操作,正常是5s的ping,在第2s后,就會被kill掉;如果在kill前已經自動結束了的話,則在wait $commandpid后,kill掉sleeppid;