为什么在linux信号事件中未使用静态成员

时间:2012-12-11 18:34:46

标签: c++ linux static

我的班级如下:

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时,它将打印正确的值。但是当它被多次调用时,它会给出未定义的行为。 为什么静态变量在完成程序执行之前就被破坏了?

1 个答案:

答案 0 :(得分:5)

operator<<()上调用std::cout不是asychronous signal-safe function ...因此您不应该在信号处理程序中使用它。任何使用都将调用未定义或最好的不确定行为。您可以在我提供的链接中看到可能的输出候选候选列表,例如低级write()等。