POSIX 线程和 SIGSEGV

发布于 2024-10-07 17:38:03 字数 89 浏览 2 评论 0原文

我的系统有 10 多个线程。我有一个信号处理程序来捕获 SIGSEGV。如果一个线程生成 SIGSEGV,该信号是否会发送到所有线程,还是仅发送到生成该信号的线程?

I have a system with 10+ threads. I have a signal handler to catch SIGSEGV. if one thread generates SIGSEGV, does that signal go to all threads, or just to the thread that generated the signal?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

℡寂寞咖啡 2024-10-14 17:38:03

SIGSEGV 是同步信号。它将被传递到导致无效内存访问的线程。来自 signal(7)

可以为整个进程生成(并因此待处理)信号(例如,
当使用 kill(2) 发送时)或针对特定线程(例如,某些信号,例如
作为 SIGSEGVSIGFPE,作为执行特定的结果而生成
机器语言指令是线程定向的,针对目标的信号也是如此
使用pthread_kill(3)的特定线程)。过程导向信号可以是
传递给当前没有信号的任何一个线程
被阻止。如果多个线程的信号未阻塞,则
内核选择一个任意线程来传递信号。

SIGSEGV is a synchronous signal. It'll be delivered to the thread that caused the invalid memory access. From signal(7):

A signal may be generated (and thus pending) for a process as a whole (e.g.,
when sent using kill(2)) or for a specific thread (e.g., certain signals, such
as SIGSEGV and SIGFPE, generated as a consequence of executing a specific
machine-language instruction are thread directed, as are signals targeted at a
specific thread using pthread_kill(3)). A process-directed signal may be
delivered to any one of the threads that does not currently have the signal
blocked. If more than one of the threads has the signal unblocked, then the
kernel chooses an arbitrary thread to which to deliver the signal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文