C++ 使用std::signal设置信号处理器-是否存在';条件';因为失败?

C++ 使用std::signal设置信号处理器-是否存在';条件';因为失败?,c++,signals,posix,c++17,C++,Signals,Posix,C++17,看着 在“返回值”下说明: 成功时先前的信号处理程序或失败时的信号错误(设置 可以在某些实现上禁用信号处理程序) 我想知道这种情况是否得到最好的处理。例如,这是否表明在支持它的平台上,它从不返回故障代码?(然后可以假设成功) 例如,这是否表明在支持它的平台上,它从不返回故障代码 没有 例如,如果您传递无效的信号号,则可能会失败,例如: std::signal(999, signal_handler); /* 999 isn't a valid signal number */ 如果尝试为SI

看着

在“返回值”下说明:

成功时先前的信号处理程序或失败时的信号错误(设置 可以在某些实现上禁用信号处理程序)

我想知道这种情况是否得到最好的处理。例如,这是否表明在支持它的平台上,它从不返回故障代码?(然后可以假设成功)

例如,这是否表明在支持它的平台上,它从不返回故障代码

没有

例如,如果您传递无效的信号号,则可能会失败,例如:

std::signal(999, signal_handler); /* 999 isn't a valid signal number */
如果尝试为
SIGKILL
SIGSTOP
设置处理程序,也可能会失败,因为它们无法捕获或忽略

在某些实现中,可以禁用设置信号处理程序

如果您正确调用了
std::signal
,但它可能返回
SIG\u ERR
,那么这只是一个附加信息。它并不表示
std::signal
不能因为任何其他原因失败

在实践中,您始终需要检查返回值,以便可以确保信号处理程序实际按照预期设置/激活,如果失败,则进行相应的处理

if ( std::signal(SIGINT, signal_handler) == SIG_ERR ) {
    std::cerr << "Couldn't set a signal handler for SIGINT\n";
    ...
}
if(std::signal(SIGINT,signal\u handler)=SIG\u ERR){
标准:cerr