pause()的问题
- #include<stdio.h>
- #include<unistd.h>
- #include<sys/time.h>
- #include<stdlib.h>
- #include<signal.h>
- #include<time.h>
- #include<string.h>
- #include<sys/mman.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include<sys/wait.h>
- #include <fcntl.h>
- void sig_alrm(int signal)
- {
- printf("haha\n");
- }
- int main(int argc, const char *argv[])
- {
- int i;
- pid_t pid;
- pid=fork();
- if(pid==0)
- {
- struct sigaction act;
- act.sa_handler=sig_alrm;
- sigemptyset(&act.sa_mask);
- act.sa_flags=SA_RESTART;
- sigaction(SIGALRM,&act,NULL);
- pause();
- }
- if(pid>0)
- {
- for(i=1;1;i++)
- {
- sleep(1);
- if((i%5)==0)
- kill(pid,SIGALRM);
- printf("%d\n",i);
- }
- }
- return 0;
- }
复制代码我这个程序想实现的功能是创建个子进程并且注册信号SIGALRM 他的处理函数是打印一个哈哈 主进程每过1秒钟向子进程发送一个SIGALRM信号 自进程打印haha 我用pause()这个慢速系统调用把子进程挂起 并且act.sa_flags=SA_RESTART 但是为什么pause被信号打断后 没有重新被调用屏幕上只打印了一个haha 请大家帮忙解惑下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
应该是
复制代码
我要用while(1) pause(); 执行就失去这个程序的意义了 我这个程序就是想验证慢速系统调用被中断后能否被再次调用 因为我act.flags=SA_RESTART了 我试验过 把pause()换成 int a; scanf("%d\n",&a); scanf被信号打断后 还能恢复 pause();就不行 这是为什么
man pause
你可以用read()代替pause()来试验
xuexi
test
tes
vvv
haode 伙