Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33921
  • 博文数量: 22
  • 博客积分: 301
  • 博客等级: 二等列兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-12 15:30
文章分类

全部博文(22)

文章存档

2019年(4)

2014年(1)

2013年(7)

2011年(8)

2010年(2)

分类:

2011-01-20 00:21:04

shell定时器

CODE:

#!/bin/sh

#调用函数KillSubProcs,然后返回值14退出.这个返回值用来表示定时器被触发
AlarmHandler() {
    echo "Got SIGALARM,cmd took too long. "
    KillSubProcs
    exit 14

}


#杀死这个脚本的所有子进程,他们的PID存放再变量CHPROCIDS中
KillSubProcs() {
    kill ${CHPROCIDS:-$!}
    if [ $? -eq 0 ] ; then
       echo "Sub-processes   killed. ";
    fi

}


#安装好SIGALAEM的信号处理器后,需要一个函数用来安装定时器.
SetTimer() {
    DEF_TOUT=${1:-10};
    if [ $DEF_TOUT -ne 0 ] ; then


#以下这个命令用sleep来等待一定的时间(存放再$DEF_TOUT中),这段时间过后,kill向脚本发送信号#SIGALAEM(脚本的PID是存放在变量$$中的)
      sleep $DEF_TOUT && kill -s 14 $$ &
       CHPROCIDS="$CHPROCIDS $!"
       TIMEERPROC=$!
    fi
}


#清除SetTimer设置的定时器(SetTimer将定时器的PID保存在变量#TIERPROC中)
UnsetTimer() {
     kill $TIMERPROC

}

#main()

trap ALarmHandler 14

SetTimer 15
$PROG &
CHPROCIDS="$CHPROCIDS $!"
wait $!
UnsetTimer
echo "All Done."
exit 0C定时器

CODE:

#include
#include
#include

char user[40];

//alarm 捕捉函数
void catch_alarm ( int sig_num)
{
        printf ("Sorry,time limit reached. \n");

//清除定时器
      alarm (0);
         exit (0);
}

int main ( int argc , char *argv[] )
{   
     //设置信号回调
  Signal ( SIGALARM,catch_alarm );
   printf ("Your Username (10 seconds limit):");
//将缓冲内容输出     
   fflush(stdout);
// 设置10秒钟
   alarm(10);
//等待用户输入
   (char*)get(user);
     printf("your username is = '%' \n'',user);
     return 0;
}
阅读(1025) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~