免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2220 | 回复: 6
打印 上一主题 下一主题

信号处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-22 15:01 |只看该作者 |倒序浏览
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

int ntimes = 0;
//void p_action(int sig), c_action(int sig);

int main()
{
        int pid, ppid;
        void p_action(int sig), c_action(int sig);
        signal(SIGUSR1, p_action);
        switch(pid=fork())
        {
        case -1:
                printf("-1 error\n";
                perror("create process failed!\n";
                break;
        //      exit(1);
        case 0:
                printf("child process\n";
                signal(SIGUSR1,c_action);
                ppid = getppid();
                printf("ppid=%d\n", ppid);
                for(;
                {
                        sleep(1);
                        kill(ppid,SIGUSR1);
                        pause();
                }
                break;
        default:
                printf("parent process\n";
                printf("pid=%d\n", pid);
                for( ; ; )
                {
                        pause();
                        sleep(1);
                        kill(pid, SIGUSR1);
                }
        }
//      return 1;
}

void p_action(int sig)
{
        printf("arent get SIGUSR1 %d times", ++ntimes);
}
void c_action(int sig)
{
        printf("arent get SIGUSR1 %d times", ++ntimes);
}
上面是程序源代码,编译,运行后的结果为
child process
ppid=16320
parent process
pid=16321

然后就卡住了,为什么p_action和c_action函数没能执行啊。刚开始学linux下编程,希望大家多多帮助啊

论坛徽章:
0
2 [报告]
发表于 2011-07-22 15:02 |只看该作者
怎么一部分代码编程图像了啊,大家看应该没问题吧

论坛徽章:
0
3 [报告]
发表于 2011-07-23 08:45 |只看该作者
pause();
一直停在这边

论坛徽章:
0
4 [报告]
发表于 2011-07-23 09:53 |只看该作者
回复 3# lwrsmy


    SIGUSR1是自定义信号

论坛徽章:
0
5 [报告]
发表于 2011-07-23 11:30 |只看该作者
case 0 里面有个 for 里面是什么??
好好检查

论坛徽章:
0
6 [报告]
发表于 2011-07-23 11:36 |只看该作者
发帖时候有个发代码的工具,你这样发的好多字符不对了

论坛徽章:
0
7 [报告]
发表于 2011-07-23 11:49 |只看该作者
回复 1# lzx4456

给你改成 父进程给子进程发信号了,可以用,你看看, 你父子对发如果不是多线程去写的容易赶在某个窗口临界区卡壳的。
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <signal.h>

  5. int ntimes = 0;
  6. //void p_action(int sig), c_action(int sig);

  7. int main()
  8. {
  9.         int pid, ppid;
  10.         void p_action(int sig), c_action(int sig);
  11. //        signal(SIGUSR1, p_action);
  12.         switch(pid=fork())
  13.         {
  14.         case -1:
  15.                 printf("-1 error\n");
  16.                 perror("create process failed!\n");
  17.                 break;
  18.         //      exit(1);
  19.         case 0:
  20.                 signal(SIGUSR1, c_action);
  21.                 printf("child process %d\n", getpid());
  22.                 for(;;)
  23.                 {
  24.                         sleep(1);
  25.                 }
  26.                 break;
  27.         default:
  28.                 printf("pid %d, the child id %d\n", getpid(), pid);
  29.                 for( ; ; )
  30.                 {
  31.                         sleep(1);
  32.                         kill(pid, SIGUSR1);
  33.                         printf("send SIGUSR1 to child\n");
  34.                 }
  35.         }
  36. //      return 1;
  37. }

  38. void c_action(int sig)
  39. {
  40.         printf("arent get SIGUSR1 %d times\n", ++ntimes);
  41. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP