【问题标题】:When would a process raise a signal that causes itself to exit?进程何时会发出导致自身退出的信号?
【发布时间】:2013-03-13 01:45:32
【问题描述】:

cpp 文档指出,

判断子进程是否因为发出信号而退出 导致它退出

关于 WIFSIGNALED 功能。什么样的情况会导致进程做这样的事情?

【问题讨论】:

  • WIFSIGNALED 检查进程是否因为any signal 而退出,不一定是它自己引发的。您的特定手册页中的措辞很尴尬。
  • 手册页应该说“received”而不是“raised”;这样会更准确。

标签: c unix process signals


【解决方案1】:

如果您使用断言来确保您的程序是正确的,则失败的assert 将生成一个信号 SIGABRT,该信号会导致进程终止。这是程序信号本身的故意情况。

信号的意外原因可以说包括(整数)除以零(SIGFPE,很有趣),未对齐的内存访问(SIGBUS;如果您使用奇数地址访问必须在偶数地址上对齐的类型,则会发生这种情况边界——但并非所有系统都对此很挑剔),或者访问无效的内存地址(SIGSEGV)。

【讨论】:

    【解决方案2】:

    有许多信号可以导致这种情况,此外,进程可以退出的方式有很多种(即使用核心转储等)。查看signals 上的手册页,特别是标准信号 部分,以查看进程可以接收的信号表以及每个信号的默认处置。如需可能的处置列表,请查看顶部的信号处置部分。

    我并不是说这是 RTFM 响应。该手册页确实为可以退出进程的信号种类提供了一个简洁明了的表格。

    例如有:

    SIGFPE - 8 - 核心 - 浮点异常

    如果它执行浮点异常,例如被零除,则将其发送到进程。这将导致您的进程以核心转储退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 2021-03-14
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2018-04-07
      • 2020-01-22
      相关资源
      最近更新 更多