pause()的问题

发布于 2022-10-15 08:43:48 字数 2593 浏览 27 评论 0

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<sys/time.h>
  4. #include<stdlib.h>
  5. #include<signal.h>
  6. #include<time.h>
  7. #include<string.h>
  8. #include<sys/mman.h>
  9. #include <sys/types.h>
  10. #include <sys/stat.h>
  11. #include<sys/wait.h>
  12. #include <fcntl.h>
  13. void sig_alrm(int signal)
  14. {
  15.         printf("haha\n");
  16. }
  17. int main(int argc, const char *argv[])
  18. {
  19.         int i;
  20.         pid_t pid;
  21.         pid=fork();
  22.         if(pid==0)
  23.         {
  24.                 struct sigaction act;
  25.                 act.sa_handler=sig_alrm;
  26.                 sigemptyset(&act.sa_mask);
  27.                 act.sa_flags=SA_RESTART;
  28.                 sigaction(SIGALRM,&act,NULL);
  29.                 pause();
  30.         }
  31.         if(pid>0)
  32.         {
  33.                 for(i=1;1;i++)
  34.                 {
  35.                         sleep(1);
  36.                         if((i%5)==0)
  37.                                 kill(pid,SIGALRM);
  38.                         printf("%d\n",i);
  39.                 }
  40.         }
  41.         return 0;
  42. }

复制代码我这个程序想实现的功能是创建个子进程并且注册信号SIGALRM  他的处理函数是打印一个哈哈 主进程每过1秒钟向子进程发送一个SIGALRM信号 自进程打印haha 我用pause()这个慢速系统调用把子进程挂起 并且act.sa_flags=SA_RESTART 但是为什么pause被信号打断后 没有重新被调用屏幕上只打印了一个haha  请大家帮忙解惑下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

很快妥协 2022-10-22 08:43:48

我这个程序想实现的功能是创建个子进程并且注册信号SIGALRM  他的处理函数是打印一个哈哈 主进程每过1秒钟向 ...
zhaijinbao 发表于 2011-04-24 15:20

    应该是

  1. while(1) pause();

复制代码

好听的两个字的网名 2022-10-22 08:43:48

我要用while(1) pause(); 执行就失去这个程序的意义了 我这个程序就是想验证慢速系统调用被中断后能否被再次调用 因为我act.flags=SA_RESTART了 我试验过 把pause()换成 int a; scanf("%d\n",&a); scanf被信号打断后 还能恢复 pause();就不行 这是为什么

吃兔兔 2022-10-22 08:43:48

man pause

DESCRIPTION
       pause()  causes the calling process (or thread) to sleep until a signal is delivered that either terminates the process or causes the invocation of a signal-catching
       function.

RETURN VALUE
       pause() only returns when a signal was caught and the signal-catching function returned.  In this case pause() returns -1, and errno is set to EINTR.

甩你一脸翔 2022-10-22 08:43:48

你可以用read()代替pause()来试验

超可爱的懒熊 2022-10-22 08:43:48

xuexi

蓝色星空 2022-10-22 08:43:48

test

暮年 2022-10-22 08:43:48

tes

仙气飘飘 2022-10-22 08:43:48

vvv

禾厶谷欠 2022-10-22 08:43:48

haode 伙

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文