我的班级如下:
AppStart{
static void SignalHandler(int signal){
std::cout<< log_file_;
}
static void Start(){
//Set log_file_ path
//Register signal handler
}
static string log_file_;
}
当第一次通过使用kill
命令发送信号来调用SignalHandler时,它将打印正确的值。但是当它被多次调用时,它会给出未定义的行为。
为什么静态变量在完成程序执行之前就被破坏了?
答案 0 :(得分:5)
在operator<<()
上调用std::cout
不是asychronous signal-safe function ...因此您不应该在信号处理程序中使用它。任何使用都将调用未定义或最好的不确定行为。您可以在我提供的链接中看到可能的输出候选候选列表,例如低级write()
等。