所以我试图提出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应该如何工作,我很抱歉..谢谢你的帮助!
答案 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
作为标记(不是您想要的)。