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

getpidd 发送信号

    来源: 互联网  发布时间:2016-12-05

    本文导语:  /*  子进程发送信号,父进程来处理  */  函数kill(getppid(),SIGUSR1)调用时,getpidd()是>0的,说明SIGUSR1是向子进程发送的。那么父进程执行到sigsuspend(&omask)时一直是挂起的,因为他没有接到SIGUSR1;  但是实际运行的时...

/* 
子进程发送信号,父进程来处理 
*/ 

函数kill(getppid(),SIGUSR1)调用时,getpidd()是>0的,说明SIGUSR1是向子进程发送的。那么父进程执行到sigsuspend(&omask)时一直是挂起的,因为他没有接到SIGUSR1; 
但是实际运行的时候,父进程一直输出parent while; 

求解???? 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
void my_signhanler(int signum) 

        time_t nowtime=0; 
        struct tm *tim; 
        if(signum==SIGUSR1) 
        { 
                if(time(&nowtime)==-1) 
                        perror("time"); 
                tim=localtime(&nowtime);//always block here 
                printf("%d-%d-%d,%d:%d:%dn",tim->tm_mon, 
                                             tim->tm_mday, 
                                             tim->tm_year+1900, 
                                             tim->tm_hour, 
                                             tim->tm_min, 
                                             tim->tm_sec); 
        } 
        else if(signum==SIGUSR2) 
        { 
                printf("quitn"); 
                //exit(0); 
        }         
        return ; 

int main() 

        printf("parent id:%dn",getpid()); 
        int pid,k,stat; 
        struct sigaction user_action; 
        sigset_t block_mask; 
        sigset_t mask; 
        sigset_t omask; 
        sigset_t pendmask; 
        //sigset_t testmask; 
        //sigemptyset(&testmask); 
        sigemptyset(&mask); 
        sigaddset(&mask,SIGUSR1); 
        //sigaddset(&testmask,SIGQUIT); 
        sigprocmask(SIG_BLOCK,&mask,&omask); 
                
        sigfillset(&block_mask); 
        user_action.sa_handler = my_signhanler; 
        user_action.sa_mask = block_mask; 
        user_action.sa_flags=0; 
        sigaction(SIGUSR1,&user_action,NULL);//设置信号处理函数 
        sigaction(SIGUSR2,&user_action,NULL); 
        pid=fork(); 
        int i=0; 
        if(pid0的,说明SIGUSR1是向子进程发送的”??

getppid 是获取父进程的进程ID,和子进程有什么关系?

|
估计getpidd是敲错了吧,没这个函数。、
他这断代码是在还没脱离父子关系的时候就弑父,如果成功那么他自己也会死掉。但是按理来说作为子进程不应该拥有杀死自己父进程的权限的,这里可能是kill()函数返回有问题(个人猜测下班回家研究确认一下)。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


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

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

    浙ICP备11055608号-3