我正在尝试发出 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
的工作原理,我深表歉意。
最佳答案
为了在备用堆栈上传递信号,您需要在注册信号处理程序时指定 SA_ONSTACK
标志:
struct sigaction act;
act.sa_handler = signal_handler;
act.sa_mask = 0;
act.sa_flags = SA_ONSTACK;
sigaction(SIGUSR1, &act, 0);
调用 signal
等同于使用 0
调用 sigaction
作为标志(不是你想要的)。
关于c++ - 使用 sigaltstack 动态更改运行信号处理程序的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34460357/