在C中运行N秒的任务

时间:2017-12-13 16:26:45

标签: c timer process

我正在尝试为uni完成任务,我遇到了一个问题。我想为我的程序创建类似“计时器”的东西。我的意思是我想要运行该程序30秒,在那些已经过去后我想在关闭它之前打印一些统计数据。由于它是一个与流程相关的项目,我希望这个计时器尽可能地传递给子流程。这是我想要完成的一些伪代码。

/* Timer starts from here */
    - forking childs
    - child execute
    - other actions
/* Timer finishes here */

Printing statistics
exit(0)

我试着在闹钟,时间和其他方面阅读一些东西,但我找不到任何可以帮助我的东西。希望你能帮助我,并提前感谢。

1 个答案:

答案 0 :(得分:1)

尝试阅读alarm()的手册页。查看alarm

的手册页
  unsigned int alarm(unsigned int seconds);

什么警报返回? alarm()返回任何先前安排的警报到期之前剩余的秒数,如果有,则返回零        之前没有安排警报。

您可以为alarm()秒设置多个N,但不能同时设置所有。{/ p>

以下是了解alarm()的简单代码。

#include<signal.h>
#include<stdio.h>
int al = 5;
void my_isr(int n)
{
        static int count = 0;//count variable

        if(n == 17) {
                /** this child will execute if child completer before 5 seconds**/
                int ret = wait(0);//releases child resources
                printf("child %d completed \n",ret);
        }

        if(n == 14) {
                printf("in sigalarm isr \n");
                /** do task here **/
                if(count<3) {
                        alarm(5);// after doing some task set another alarm
                }
                count++;
        }
}
int main()
{
        if(fork()==0)
        {
                printf("child : pid = %d ppid  = %d\n",getpid(),getppid());
                /** letting the child to run for 20 seconds **/
                sleep(20);
                printf("child exits after task over \n");
                exit(0);
        }
        else
        {
                alarm(al);//setting 5 seconds timer for child to finish job

                signal(SIGALRM,my_isr);
                /** to avoid child to become zombie. when child completes parents will receive SIGCHLD signal, upon receving this parent needs to free the resources associated with it using wait */ 
                signal(SIGCHLD,my_isr);
                while(1);//to keep main process alive for observation
        }
}

我希望它可以帮到你。