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

信号程序问题

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

    本文导语:  我先屏蔽了信号SIGUSR1,使程序休眠15秒,在这15秒内向程序发送SIGUSR1应该没有反应,但是我还是收到catch SIGUSR1信号,是不是屏蔽时出了什么问题,还有点问题,是不是在休眠时发送信号休眠时间没到程序就不休眠了...

我先屏蔽了信号SIGUSR1,使程序休眠15秒,在这15秒内向程序发送SIGUSR1应该没有反应,但是我还是收到catch SIGUSR1信号,是不是屏蔽时出了什么问题,还有点问题,是不是在休眠时发送信号休眠时间没到程序就不休眠了,接着往下执行,谢谢大家指点一下


#include 

#include 

#include 


void sigusr1_handler(int signo)

{

printf("catch SIGUSR1");

}


int main(void)

{

sigset_t sig_set;


if(signal(SIGUSR1, sigusr1_handler) == SIG_ERR)

{

perror("can not set handler for SIGUSR1");

exit(1);

}


sigemptyset(&sig_set);

sigaddset(&sig_set, SIGUSR1 - 1);


if(sigprocmask(SIG_BLOCK, &sig_set, NULL) == -1)

{

perror("fail to set signal-mask");

exit(1);

}


printf("SIGUSR1 is not available");


sleep(15);


if(sigprocmask(SIG_UNBLOCK, &sig_set, NULL) == -1)

{

perror("fail to set signal-mask");

exit(1);

}


printf("SIGUSR1 is available nown");


sleep(15);


return 0;

}

|
问题就出在减1上,把减1去掉试一下!
14楼的回复有问题:
6、最有趣的是我发现,13楼说的问题,减1或不减1效果竟然相同!
错了,减1和不减1差距很大!
楼主你可以再试一下!

|
不是。因为你并没有给他设置默认处理函数或者ignore这个信号。所以,就算这个信号被block了,他还是会发送的。所以你就接收到了。

|
屏蔽信号不等于丢弃该信号,而是处于一种“pending”态。

pending态的信号,在不屏蔽了之后,就又收到了。

信号处于pending状态的时候,可以再修改这个信号的处理方式。不是信号就扔了。

    
 
 

您可能感兴趣的文章:

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












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


  • 站内导航:


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

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

    浙ICP备11055608号-3