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

sigaction函數问题

    来源: 互联网  发布时间:2016-10-04

    本文导语:  #include"stdio.h" #include"stdlib.h" #include"signal.h" void sigusr1_handler(int signo) {   printf("catch SIGUSR1n");   sleep(5);   printf("back to mainn"); } int main(void) {   struct sigaction act;   act.sa_handler=sigusr1_handler;   act.sa_flags=SA_NODEFER;  ...

#include"stdio.h"
#include"stdlib.h"
#include"signal.h"

void sigusr1_handler(int signo)
{
  printf("catch SIGUSR1n");
  sleep(5);
  printf("back to mainn");
}

int main(void)
{
  struct sigaction act;
  act.sa_handler=sigusr1_handler;
  act.sa_flags=SA_NODEFER;
  act.sa_sigaction=NULL;
  sigemptyset(&act.sa_mask);
  sigaddset(&act.sa_mask,SIGTERM);
  if(sigaction(SIGTERM,&act,NULL)==-1)
  {
    printf("fail to set handler for SIGUSR1n");
    exit(1);
  }
  printf("process beginn");
  sleep(20);
  printf("donen");
  return 0;
}

这是一个信号处理程序,在shell中编译该程序如下
$gcc -g nodefer.c -o nodefer
在shell中运行该程序如下
$./nodefer
process begin
在另一个shell中使用ps命令得到进程ID
$ps -u admin
PID TTY TIME CMD
2131 .....          nodefer
使用kill命另向该进程发送SIGUSR1信号
$kill -USR1 2131
此时第一个shell输出:
用户定义信号 1.然后进程就结束了
按道理应该输出:
catch SIGUSR1.然后等待下一个信号才对.不知道这是什么原因.情哪位高手指点一下
我gdb调试了一下,出现:
26   sleep(20);
(gdb) 

Program received signal SIGUSR1, User defined signal 1.
0x00007ffff7b03370 in nanosleep () from /lib/libc.so.6





|
SIGKIL信号的信号处理函数应该只能使用系统默认的函数 即杀死进程
lz要做实验的话 可以修改一下其他的信号处理函数

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












  • 相关文章推荐
  • 请问,在linux中rt_sigaction和sigaction有什么区别
  • 如何用sigaction( )捕获到任何可以被捕获的信号?
  • signal和sigaction区别
  • sigaction这里为什么没有效果,求分析.
  • 调用sigaction却没反应,请帮忙看看!!
  • sa_sigaction 如何用第三个参数
  • linux c编程,sigaction函数
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 信号的"安全和不安全",仅仅是指signal()和sigaction()的区别么?
  • c++中怎么写sigaction()中的信号处理函数
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 问问关于sigfillset 和 sigaction:看如下代码
  • 請教sigaction函數的用法
  • sigaction函数的使用 刚开始学,请高手们指教
  • 用sigaction设置了捕捉函数,为什么进程仍然会被终止
  • 用sigaction & sigqueue 实现进程间通信
  • linux sigaction函数,以及输入输出
  • sigaction如何设置信号执行函数时屏蔽和屏蔽本身信号.


  • 站内导航:


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

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

    浙ICP备11055608号-3