当前位置:  技术问答>linux和unix

关于循环触发alarm调用heandler的问题,谢谢指点,解决立马结贴!

    来源: 互联网  发布时间:2016-08-04

    本文导语:  每次fork出子程序,运行程序1,若超过3秒就kill子程序,同时主程序继续调用程序2,若超时就kill子程序,主程序运行程序3.当然若不超时就等子程序返回后主程序继续运行下一个程序. 我的目的就是要把程序1-n都运行一遍,中...

每次fork出子程序,运行程序1,若超过3秒就kill子程序,同时主程序继续调用程序2,若超时就kill子程序,主程序运行程序3.当然若不超时就等子程序返回后主程序继续运行下一个程序.
我的目的就是要把程序1-n都运行一遍,中途若有运行超过三秒的就kill掉,继续自动执行下面的程序.

该怎么写? 应该要用到fork,alarm,handler,wait或pause等.

谢谢,在线结贴.
若需要我可以把我写的代码贴一下,大家帮我看看哪里有问题.

|
楼主你的代码在我这里没错呀 
我在handler加了个输出
void handler(int thesig){ 
          printf("hander");
          kill(pid, SIGKILL);      


我的执行文件test.sh
execlp("/root/test/test.sh", "test.sh",NULL);
test.sh内容
#!/bin/bash
echo "test.sh"
sleep 10


handler里面确实去了2次 程序的输出
test.sh
handler
test.sh
handler

所以我怀疑你是不是把execlp函数用错了


|
不用alarm也行,试试我这个

#include 
#include 
#include 
#include 
#include 

#define TSLEEP 5

char *Cmds[2] = { "/usr/bin/xclock",
                  "/usr/bin/xterm",};


int main() {

    pid_t pid;
    int s; //exit status
    int index = 0;

    while (1) {
        pid = fork();

        if(pid == -1) err(1, "fork");
        if(pid == 0) {
            execl(Cmds[index], "", (char *)NULL);
            exit(1);
        }

        sleep(TSLEEP);
        kill(pid, SIGTERM);
        sleep(1);
        kill(pid, SIGKILL);

        if(wait(&s) == -1) err(1, "wait");
        if(WIFSIGNALED(s) && (WTERMSIG(s) == SIGTERM || WTERMSIG(s) == SIGKILL)) puts("killed");
        else if(WIFEXITED(s) && WEXITSTATUS(s) == 0) puts("exited normally");
        else puts("other case");

        index=++index%2;
    }
    return EXIT_SUCCESS;
}


|


使用一下的结构

int main()
{
signal(SIGALRM,handler);

alarm(3)

while(1)
pause();
return 0;
}

void handler(int sig)
{
//your  operation
alarm(3)
return;

}



我这个只是个大致框架,楼主可以参考参考

|
笔误 应该是
void handler(int thesig){ 
          printf("handern"); 
          kill(pid, SIGKILL);      

|
关于循环触发alarm调用heandler的问题,谢谢指点,解决立马结贴![图片]


按照LZ的代码,刚刚我也运行了一遍,基本没问题。


不知道是不是因为机器的原因。


根据我自己的经验,多次循环的调用alarm,对于比较精细的定时,比较容易出错。


我曾今使用alarm定时,本来就只几秒钟的事情,他还有时候给我推迟,有时候给我提前

几秒钟的事情还这样,是不可忍受的。

|
你还是把你的代码贴出来吧 大家给你找错

|
看的有点晕~~~~~

    
 
 

您可能感兴趣的文章:

  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 请教:javascript 里有没有时间循环执行的函数,如我按住鼠标触发mousedown 事件函数时,反复执行我写的一个函数?
  • 请教如何通过循环生成控件?如何显示事件触发后生成的控件?可以这样写吗(见内)?谢谢!
  • 如何实现exec系列的循环调用???
  • shell脚本for循环中如何调用别的程序?
  • 急急急!!!如何使C程序中循环调用linux的程序而不退出?
  • 关于线程同步循环调用的问题!
  • Spring中DAO被循环调用的时候数据不实时更新的解决方法
  • while循环中调用write()函数,为什么只执行一次?
  • 求助~~无限循环调用sognal()函数会不会造成系统死机或有什么副作用?
  • 调用ACE_SSL_SOCK_Acceptor::accept函数的时候,进程死掉(在一个死循环中不断的调用accept,程序运行一段时间后,就会死掉)
  • 循环调用System函数执行telnet脚本出错!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用循环建立一个VECTOR。里面放的是对象BOX,然后在下面的程序中要用的BOX的方法属性?出错,大仙指点。
  • ???请高人指点!!!Java多线程中run()方法中的while(true)循环有什么意义?
  • for循环最大支持多大的循环次数?这什么我执行10000次的时候发生了错误?
  • 循环套循环的问题.
  • 请教一个基础问题while循环怎么从10到0来循环10次?
  • json数据的列循环 JS循环遍历JSON数据
  • UX下如何判断线程是否还在运行?UX下如何在for循环进入死循环时,强行停止它(不再for中处理)?
  • for循环中为什么在第8次循环会出现“memory fault coredumpe”的错误??
  • MySQL循环语句之while循环测试
  • shell while循环内的变量在循环外部值不能传递
  • ”整型变量j说明为volatile,这样就阻止了优化程序除去循环语句“ 这么理解这句话,为什么会除去循环语句?
  • 解析在内部循环中Continue外部循环的使用详解
  • 请教这种循环的执行过程
  • jquery进行数组遍历如何跳出当前的each循环
  • c#入门之循环语句使用详解(for循环、do/while)
  • jquery退出each循环的写法
  • 请教:LINUX用不用循环机制?与WINDOWS有什么本质区别?
  • java中怎样退出 for 循环?
  • Jquery each方法跳出循环,并获取返回值(实例讲解)
  • “死锁就是循环等待”这句话不对吗?谢谢!
  • Python跳出循环语句continue与break的区别
  • break在java里是跳出所有循环吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3