当前位置:  技术问答>linux和unix

关于信号的程序

    来源: 互联网  发布时间:2015-12-11

    本文导语:  总是出错,请大虾指点: include   #include   #include   #include   #include   volatile sig_atomic_t  child_quit=0;  time_t now;   struct tm *timenow;     void parent_handler(int signum)  {          if (signum==SIGUSR1)     {  time(&...

总是出错,请大虾指点:
include 
 #include 
 #include 
 #include 
 #include 

 volatile sig_atomic_t  child_quit=0;
 time_t now;
  struct tm *timenow;   
 void parent_handler(int signum)
 {    
     if (signum==SIGUSR1)
    {  time(&now);
        timenow=localtime(&now);
        printf("Now, the time is %sn",asctime(timenow));
    }      
 }
 void parent_handler1(int signum)
   {    if (signum==SIGUSR2)
          {   child_quit=1;
               printf("I have rece the sigusr2");
          }
  }
 
 int  main()
 {
   pid_t p_id,ppid;
   int i;
   struct sigaction user_action,user_action1;
   sigset_t blockmask;
   sigfillset(&blockmask);
   user_action.sa_handler=parent_handler;
   user_action1.sa_handler=parent_handler1;
   user_action.sa_mask=blockmask;
   user_action1.sa_mask=blockmask;
   ppid=getpid();
   printf("the current process id is %dn",ppid);
   p_id =fork();
    if (p_id>0 )//parent process
    {
     printf("I am the parent process ");
     sigaction(SIGUSR1,&user_action,NULL);
    sigaction(SIGUSR2,&user_action1,NULL);
         for(;;)
         { if  (child_quit!=1)
          {
            sleep(1); //or use sigsuspend
           }
           else return  ;
          }
     }
     else if (p_id==0)  //child porcess
        {   
          printf("I am the child process ");
          for  (i=0;i ./sigtest
the current process id is 3056.
I am the parent process.
I am the child process.
the SIGUSR1 is send successfully.
Now, the time is Mon Aug 21 23:06:12 2006
the SIGUSR1 is send successfully.
User signal 1
sms@test1> the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.
the SIGUSR1 is send successfully.

|
你是在主进程里执行:
sigaction(SIGUSR1,&user_action,NULL);
sigaction(SIGUSR2,&user_action1,NULL);
如果子进程先运行的话, 发送SIGUSR1信号,这时主进程默认是忽略此信号的.

|
在信号发生跳转到自定的handler处理函数执行后,系统会自动将此处理函数换回原来系统预设的处理方式.

    
 
 

您可能感兴趣的文章:

  • 在执行信号处理程序来一个信号会怎么样?
  • linux 只有SIGUSR1和SIGUSR2,如果有多个应用程序需要信号,怎么办?
  • SIGRTMIN-SIGRTMAX的信号,是OS产生的,还是用户程序产生的?
  • linux信号处理程序
  • 多线程socket程序莫名其妙接收到SIGALRM信号问题。
  • 请问:我想让配置文件变更后,发一个信号,从而让守护进程重新加载配置,程序思路大约是怎样的啊?
  • 写socket程序的时候,都需要注意哪些信号?
  • linux socket程序除了有可能接受到SIGPIPE信号使程序中断外,还有什么别的信号如此?
  • 如何在拦截到sigsegv信号时打印出程序的调用栈?
  • 无法阻塞信号的问题(附程序)
  • 请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?
  • linux中使用信号进行定时编程会不会引起打断不应该被打断的程序造成错误?
  • ***************unix 系统中,信号量(signal)被屏蔽了,怎么开(是在命令行超作,不是在程序中)
  • 信号程序问题
  • (在线等)问个关于信号和进程的问题,有个程序哈!
  • signal()函数捕捉信号问题,有程序
  • 还是不懂,驱动到底如何能同步的发送信号给用户程序,请教高人,谢谢了
  • 关于不可靠信号的问题,照抄书上的程序,结果却和它说得不一样
  • (在线等)关于信号的一个程序
  • 请教信号发送程序遇到的一个问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 关于信号量与UNIX信号的疑问
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 当信号量(灯)遇上信号,help!
  • 请问什么时候发出SIGKILL信号、什么时候发出SIGTERM信号?
  • 安全信号和不安全信号的实现机制有什么不同么?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 自旋锁和读写自旋锁、信号量和读写信号量分别有什么区别?
  • 关于消息队列信号量信号共享内存等核心编程的问题(求知若渴!!!.....)
  • 可靠信号和不可靠信号的问题
  • semaphore.h sem.c Posix 信号量 System v 信号量
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • 终端被关闭后,bash收到哪些信号,这些信号是怎么来的?
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • linux 中信号量的使用 当信号初始化的时候设置的值大于1将是如何?
  • 大侠们求指导,电信骨干网光纤信号分流成多个千兆网信号
  • 32号信号和33号信号哪里去拉?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3