使用sigaltstack动态更改信号处理程序运行的堆栈

时间:2015-12-25 05:47:40

标签: c++ c++11 stack signals

所以我试图提出100个信号(SIGUSR1)并让它们都在自己的堆栈中运行,有人可以解释我怎么能这样做吗?请问以下代码

std::signal(SIGUSR1, signal_andler);

for (int i = 0; i < 100; ++i) {
    stack_t stack;
    stack.ss_flags = 0;
    stack.ss_size = FIBER_STACK;
    stack.ss_sp = malloc( FIBER_STACK );

    sigaltstack( &stack, 0 );

    raise( SIGUSR1 );
}

我在某处使用sigaction阅读其他实现,但我再也不知道那是什么。如果我完全误解了sigaltstack应该如何工作,我很抱歉..谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

为了在备用堆栈上传递信号,您需要在注册信号处理程序时指定SA_ONSTACK标志:

struct sigaction act;
act.sa_handler = signal_andler;
act.sa_mask = 0;
act.sa_flags = SA_ONSTACK;
sigaction(SIGUSR1, &act, 0);

调用signal相当于使用sigaction调用0作为标记(不是您想要的)。