gpt4 book ai didi

c - pthread_sigmask 干扰 GDB

转载 作者:行者123 更新时间:2023-12-01 18:33:59 25 4
gpt4 key购买 nike

我一直在 Linux 下开发一个多线程程序,对信号处理有特殊要求。例如,我需要程序打印单个 Ctrl-C 输入的统计信息。

我使用 pthread_sigmask 和 sigwait 实现了这一点,即我在创建其余线程之前阻塞了主线程中的所有非关键信号,并且我启动了一个阻塞在 sigwait 上的“捕捉器”线程。

初始化(主要):

sigfillset(&set);
sigdelset(&set, SIGSEGV);
sigdelset(&set, SIGBUS);
sigdelset(&set, SIGILL);

s = pthread_sigmask(SIG_BLOCK, &set, NULL);
if (s != 0)
handle_error_en(s, "pthread_sigmask");

s = pthread_create(&signal_thread, NULL, &sig_thread, (void *) &set);
if (s != 0)
handle_error_en(s, "pthread_create");

捕手线程例程:

void *sig_thread(void *arg) {
sigset_t *set = (sigset_t *) arg;
int s, sig;

pthread_detach(pthread_self());

for(;;) {
s = sigwait(set, &sig);
if (s != 0)
handle_error_en(s, "sigwait");
switch(sig) {
case SIGINT:
break;
case SIGTERM:
break;
case SIGUSR1:
break;
case SIGUSR2:
break;
default:
break;
}
}
pthread_exit(NULL);
return NULL;
}

一切都按预期工作,但我的捕获机制阻止 GDB 暂停程序(触发 SIGINT 例程)。我该如何解决这个问题?

谢谢

最佳答案

在附加 gdb 之前尝试使用 SIGSTOP(而不是 SIGINT)暂停程序。 SIGSTOP 不能被捕获或忽略,它将暂停您的程序,直到 gdb 附加到它(然后可以继续它)。

关于c - pthread_sigmask 干扰 GDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com