我正在尝试为uni完成任务,我遇到了一个问题。我想为我的程序创建类似“计时器”的东西。我的意思是我想要运行该程序30秒,在那些已经过去后我想在关闭它之前打印一些统计数据。由于它是一个与流程相关的项目,我希望这个计时器尽可能地传递给子流程。这是我想要完成的一些伪代码。
/* Timer starts from here */
- forking childs
- child execute
- other actions
/* Timer finishes here */
Printing statistics
exit(0)
我试着在闹钟,时间和其他方面阅读一些东西,但我找不到任何可以帮助我的东西。希望你能帮助我,并提前感谢。
答案 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
}
}
我希望它可以帮到你。