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