有没有办法用sigaction
结构和功能捕获一次信号?更具体地说,我想简单地重置为默认特定信号(SIGINT
)。是否有可能在处理程序中实现这一点?
所以,这样的事情是正确的:
void sig_int(int sig) { printf(" -> Ctrl-C\n"); struct sigaction act; act.sa_handler = SIG_DFL; if(sigaction(SIGINT, &act, NULL) < 0) { exit(-1); } } int main() { struct sigaction act; act.sa_handler = sig_int; if(sigaction(SIGINT, &act, NULL) < 0) { exit(-1); } while(1) { sleep(1); } return 0; }
答案 0 :(得分:4)
sa_flags
struct sigaction
成员中设置的The standard SA_RESETHAND flag就是这样做的。
在指定SIGINT处理程序时设置该标志,并且在进入时处理程序将重置为SIG_DFL。
答案 1 :(得分:1)
是的,您可以在信号处理程序中调用sigaction
。由Posix指定的,(在XBD chapter 2.4.3)&#34;中定义了一组异步信号安全的函数。&#34;然后它注意到&#34;应用程序可以无限制地调用信号捕获功能。 &#34 ;. sigaction()
列在该列表中。
答案 2 :(得分:1)
只需恢复程序中的默认操作。
struct sigaction old;
void sig_int(int sig)
{
printf(" -> Ctrl-C\n");
if(sigaction(SIGINT, &old, NULL) < 0)
{
exit(-1);
}
}
int main()
{
struct sigaction act;
act.sa_handler = sig_int;
if(sigaction(SIGINT, &act, &old) < 0)
{
exit(-1);
}
while(1)
{
sleep(1);
}
return 0;
}