cpp 文档指出,
它确定子进程是否退出,因为它引发了一个导致它退出的信号
关于 WIFSIGNALED 功能。什么样的情况会导致进程做这样的事情?
如果您使用断言来确保您的程序是正确的,那么失败assert
将生成一个信号 SIGABRT,它会导致进程终止。这是一个程序信号本身的故意案例。
信号的意外原因可以说包括(整数)除以零(SIGFPE,有趣的是),未对齐的内存访问(SIGBUS;如果您使用奇数地址访问必须在偶数地址边界上对齐的类型,则会发生这种情况 - 但是并非所有系统都对此很挑剔),或者访问无效的内存地址(SIGSEGV)。
有许多信号会导致这种情况,此外,进程可以退出的方式有很多种(例如,使用核心转储等)。查看有关信号的手册页,特别是标准信号部分,以查看进程可以接收的信号表以及每个信号的默认处置。有关可能的处置列表,请查看顶部的信号处置部分。
我并不是说这是 RTFM 的回应。该手册页确实为可以退出进程的信号种类提供了一个简洁明了的表格。
例如,有:
SIGFPE - 8 - 核心 - 浮点异常
如果它执行浮点异常,例如被零除,则将其发送到进程。这将导致您的进程以核心转储退出。