当前位置: 技术问答>linux和unix
linux c编程,sigaction函数
来源: 互联网 发布时间:2016-04-26
本文导语: 相关代码如下: #include #include #include void new_op(int, siginfo_t *, void *); int main(void) { struct sigaction act; int signo = SIGALRM; sigemptyset(&act.sa_mask); act.sa_flags=SA_SIGINFO; act.sa_sigaction=new_op; ...
相关代码如下:
只能输出一句sigaction over.
为什么new_op函数里的printf语句没有输出来?
谢谢
#include
#include
#include
void new_op(int, siginfo_t *, void *);
int main(void)
{
struct sigaction act;
int signo = SIGALRM;
sigemptyset(&act.sa_mask);
act.sa_flags=SA_SIGINFO;
act.sa_sigaction=new_op;
alarm(3);
if(sigaction(signo,&act,(void *)NULL) >=0)
{
printf("sigaction over.n");
}
return 0;
}
void new_op(int signum,siginfo_t *info, void *myact)
{
printf("in new_op.n");
return;
}
只能输出一句sigaction over.
为什么new_op函数里的printf语句没有输出来?
谢谢
|
程序退出了,不要让它退出。
alarm(3);
if(sigaction(signo,&act,(void *)NULL) >=0)
{
printf("sigaction over.n");
}
while (1); // 或者 system("pause");
return 0;
|
信号处理函数要在发信发生时才会得到处理,而你的程序还没有来得及等到信号发生就退出了。可以直接调用一个pause()函数,以等到信号发生再继续看现象。
|
alarm(3);
之后main就退出了, 进程就结束了
之后main就退出了, 进程就结束了
|
直到程序退出都没有产生SA_SIGINFO信号,所以信号处理函数new_op不会被调用。