1

我的班级如下所示:

AppStart{
static void SignalHandler(int signal){
    std::cout<< log_file_;
}
static void Start(){
//Set log_file_ path 
//Register signal handler 
}
static string log_file_;
}

当第一次通过使用命令发送信号来调用 SignalHandler 时,kill它正在打印正确的值。但是当它被多次调用时,它会给出未定义的行为。为什么静态变量在程序执行完成之前就被破坏了?

4

1 回答 1

5

调用operator<<()onstd::cout不是一个异步信号安全函数……因此您不应该在信号处理程序中使用它。对其的任何使用都将调用未定义的或充其量是不确定的行为。write()您可以在我提供的链接中看到输出的可能替代候选列表,例如低级等。

于 2012-12-11T18:37:58.580 回答