在我的应用程序中,我有多个线程,这些线程之一负责捕获信号并处理它们。 我的主要问题是,因为OS会随机选择进程中的一个线程,并向其传递处理信号。 因此,拾取的线程可能不是负责处理信号的线程。

我必须阻止主线程中的信号,任何新线程都将继承主线程的掩码,因此它们将无法处理信号,只有相应的线程才能执行。

那么谁能为我提供C语言的示例代码,该怎么做?

我已经写了与保持线程休眠并在收到信号后将其唤醒有关的部分,您可以找到以下stackoverflow-线程阻塞,等待信号

  ask by IoT translate from so

本文未有回复,本站智能推荐:

2回复

当其中一个线程收到信号并且没有一个线程阻塞信号时,所有线程是否都暂停了?

我正在Linux上运行用C编写的多线程应用程序。 为了停止执行,我发送了SIGINT并从信号处理程序中调用了许多清理例程,最后,调用exit(0) 。 处理程序执行清除例程时,其他线程是否仍在运行或可能正在运行(上下文切换)?
2回复

哪个线程处理信号?

我有2个线程(thread1和thread2)。 而且我对SIGINT有信号处理。 只要SIGINT出现,线程2就应该处理信号。 为此,我写了下面的程序 我编译并运行该程序。 每1秒“thread1 active”正在打印,并且每3秒“thread2 active”正在打印。
3回复

信号处理程序和多线程

我知道信号是CPU与OS内核之间进行通信的一种方式。 信号可以中断指令序列,执行处理程序并返回到指令序列。 这是此链接的一部分描述: 当正在处理的信号被进程处理时,由该信号处理程序临时中断该进程正在执行的正常指令序列。 然后,该过程继续执行,但是现在执行信号处理程序中的指令。
2回复

在Linux中使用多个线程进行信号处理

在Linux中,当程序(可能有多个线程)收到SIGTERM或SIGHUP等信号时会发生什么? 哪个线程截获信号? 多个线程可以获得相同的信号吗? 是否有专门用于处理信号的特殊线程? 如果没有,那么处理信号的线程内部会发生什么? 信号处理程序例程结束后如何恢复执行?
1回复

如何正确终止信号处理程序中的线程?

我想为SIGSEGV,SIGILL和可能的其他一些信号设置信号处理程序,而不是终止整个过程,而只是终止有问题的线程,并可能在某个地方设置一个标志,以便监视线程可以投诉并启动另一个线程。 我不确定是否有安全的方法可以做到这一点。 Pthreads似乎提供了退出当前线程以及取消另一个线程的功能,
2回复

有什么方法可以将信号从另一个进程发送到线程吗?

我想将信号从一个进程发送到另一个进程 (尚未创建该线程)创建的线程。 我对此的了解是: 提高 :将信号发送到同一进程 pthread_kill可以从同一进程(即创建该线程的进程)向线程发送信号。 您不能使用pthread_kill从另一个进程向线程发送信号。 杀
1回复

如何在线程中等待信号?

我正在从内核空间中的模块向进程发送信号。 这个过程有一个线程在等待信号。 我阅读了信号手册,它说:信号处理是一个每进程属性:在多线程应用程序中,包括信号的处理对所有线程都是相同的。 因此,根据手册pthread_sigmask: http : //man7.org/linux/ma
1回复

从另一个非进程向日志发送信号到线程,日志堆栈未发生

我正在尝试从另一个进程(不是从创建该线程的进程向POSIX线程发送信号。我使用kill(...)发送信号的操作是:: 并在注册SIGUSR1的线程中: 现在,可以预期它将追溯Thraed堆栈,而不是调用它的主进程。 但是没有发生。 stack_dump被调用,但不是记录线程堆
1回复

为什么需要在多线程程序中使用Pthread_sigmask来确保set处理程序正在处理信号?

我有一个多线程程序,该程序需要每25ms处理一次setitimer()发送的Linux信号SIGVTALRM。 但是我很困惑。 我不知道为什么需要使用Pthread_sigmask()来阻止和取消阻止信号。 无论在给定的时刻正在处理哪个线程,发送信号时都不会处理信号吗?
2回复

将信号定向到C中的特定线程

我们在进程中使用posix间隔计时器(使用timer_create()创建),该计时器会在计时器到期时生成SIGALRM。 生成的信号由进程中的特定线程异步处理(sigwait),我们已使用sig_block在所有其他线程中阻止了该信号。 “ Sig_block”在子线程产生之前在主线程中被调用,