【问题标题】:How to understand SIGSTOP is delivered?如何理解 SIGSTOP 交付?
【发布时间】:2020-04-12 21:22:37
【问题描述】:

我的问题是处理 SIGSTOP。我知道 SIGSTOP 不能被捕获、处理和阻止,但是在代码的某个地方,如果传递了 SIGSTOP 信号,则必须继续执行。我知道我需要用 SIGCONT 向我的进程发出信号,但我如何理解 SIGSTOP 已交付?是否必须有另一个不断发送 SIGCONT 的进程?必须是外部进程吗?

【问题讨论】:

  • 如何检查信号到达?向我们展示代码。
  • 但是为什么你的代码会收到 SIGSTOP?它背后一定有逻辑/原因(而且它不是随机出现的)对吗?因为 SIGSTOP 通常不是进程意外收到的东西。这也是您需要放置 SIGCONT 逻辑的地方 - 可能与发送 SIGSTOP 的进程不同。

标签: c linux signals


【解决方案1】:

您的进程无法检测到 SIGSTOP,就像它无法检测到 SIGKILL 一样。进程检测到它已收到信号的方式是通过信号处理程序(或等效的,例如 Linux 上的 signalfd)接收通知。由于无法捕获 SIGSTOP,因此您的进程无法收到任何通知。

如果愿意,您可以使用外部进程向其发送 SIGCONT,但也许现在是质疑您的进程为何在不需要时收到 SIGSTOP 的好时机。如果这纯粹是预防性的,则可能不值得担心,除非您的软件高度安全或安全至关重要,在这种情况下,您可能希望以单独的用户身份运行它以限制谁可以发出信号。

【讨论】:

  • 在我的代码部分的某处,有一个临界区,不能被 SIGSTOP 中断。在那个计算中,我需要忽略 SIGSTOP。在进入关键部分之前向另一个进程发送信号是一个不错的选择吗?所以其他进程会知道我需要继续并发送信号,但我不确定,因为信号是异步的。
  • 您的进程是否真的有可能收到 SIGSTOP?为什么要发送?这就是你应该解决的问题。如果只是为了以防万一,请不要担心。大多数开发人员不会考虑随机的意外信号情况,因为它无关紧要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多