当前位置: 技术问答>linux和unix
来看看 高手们
来源: 互联网 发布时间:2016-10-03
本文导语: #include #include #include #include #include #include void print() { printf("I am livingn"); } int main() { signal(SIGALRM,print); pid_t pid; /*struct itimerval tick; tick.it_value.tv_sec=1; tick.it_value.tv_usec=0; tick.it_interval.tv_sec=1; tick.it_interva...
#include
#include
#include
#include
#include
#include
void print()
{
printf("I am livingn");
}
int main()
{
signal(SIGALRM,print);
pid_t pid;
/*struct itimerval tick;
tick.it_value.tv_sec=1;
tick.it_value.tv_usec=0;
tick.it_interval.tv_sec=1;
tick.it_interval.tv_sec=0;*/
pid=fork();
if(pid==0)
{
while(1)
{
alarm(3);
//setitimer(ITIMER_REAL,&tick,NULL);
}
}
else if(pid!=-1)
{
while(1)
{
waitpid(pid,NULL,WNOHANG);
printf("hahan");
}
}
else printf("fork() errorn");
return 0;
}
为什么这个程序只有在父进程不停打haha才能看到子进程的定时信号有反应,但是反应也不是3秒一次,如果不是一直输出haha,就看不到子进程的信号响应
高手来看看啊 急
#include
#include
#include
#include
#include
void print()
{
printf("I am livingn");
}
int main()
{
signal(SIGALRM,print);
pid_t pid;
/*struct itimerval tick;
tick.it_value.tv_sec=1;
tick.it_value.tv_usec=0;
tick.it_interval.tv_sec=1;
tick.it_interval.tv_sec=0;*/
pid=fork();
if(pid==0)
{
while(1)
{
alarm(3);
//setitimer(ITIMER_REAL,&tick,NULL);
}
}
else if(pid!=-1)
{
while(1)
{
waitpid(pid,NULL,WNOHANG);
printf("hahan");
}
}
else printf("fork() errorn");
return 0;
}
为什么这个程序只有在父进程不停打haha才能看到子进程的定时信号有反应,但是反应也不是3秒一次,如果不是一直输出haha,就看不到子进程的信号响应
高手来看看啊 急
|
alarm()是用来设置定时器的,只是说3秒后会给进程发一个信号。
会不断更新定时器,这样,系统永远无法给相应的进程发SIGALRM的。
另外,一直不断地打印haha,也不是因为子进程的定时信号起作用,如上面所说的。
可以把子进程中的alarm()去掉,就会发现也依然会不断地打印。
while(1)alarm(3);
会不断更新定时器,这样,系统永远无法给相应的进程发SIGALRM的。
另外,一直不断地打印haha,也不是因为子进程的定时信号起作用,如上面所说的。
可以把子进程中的alarm()去掉,就会发现也依然会不断地打印。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。