发送信号为什么出现User defined signal 1

liyi54188 2011-08-02 04:36:53
我发信号的时候怎么会出现:User defined signal 1,请大家指教下,谢谢了

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <unistd.h>


void sigusr1_handler(int signo)

{

printf("catch SIGUSR1\n");


sleep(15);


printf("back to main\n");

}


int main(void)

{

struct sigaction act;


act.sa_handler = sigusr1_handler;

act.sa_flags = SA_NODEFER;

act.sa_sigaction = NULL;

sigemptyset(&act.sa_mask);


if(sigaction(SIGUSR1, &act, NULL) == -1)

{

perror("fail to set handler for SIGUSR1");

exit(1);

}


printf("process begin\n");
sleep(15);


printf("done\n");


return 0;


}
...全文
2622 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
z540763534 2012-05-06
  • 打赏
  • 举报
回复
看回复解决问题
liyi54188 2011-08-11
  • 打赏
  • 举报
回复
呵呵,多谢指教了!
Mo971443315 2011-08-09
  • 打赏
  • 举报
回复 1
这为仁兄肯定是上课时没注意了,act.sa_handler 和act.sa_sigaction 只能选择用一个,man sigaction 里有这么一句话,On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction.说了这个应该知道原因了吧
name_110 2011-08-04
  • 打赏
  • 举报
回复
act.sa_sigaction = NULL;这一行去掉就没问题了!

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void sigusr1_handler(int signo)
{
printf("catch SIGUSR1\n");
sleep(15);
printf("back to main\n");
}

int main(void)
{
struct sigaction act;
act.sa_handler = sigusr1_handler;
act.sa_flags = SA_NODEFER;
sigemptyset(&act.sa_mask);
if(sigaction(SIGUSR1, &act, NULL) == -1)
{
perror("fail to set handler for SIGUSR1");
exit(1);
}
printf("process begin\n");
sleep(15);
printf("done\n");
return 0;
}
liyi54188 2011-08-04
  • 打赏
  • 举报
回复
多谢指教了,是这个的问题,注释掉就好了,为什么act.sa_sigaction = NULL;要被注释掉阿,他不是个替代处理函数,只有当Sa_flags的值为SA_SIGINFO才使用act.sa_sigaction,我以前好像也是这么写没发现问题,你能否指教下我阿,谢谢了!!

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧