进程每秒钟输出log到stdout, 用kill指令杀死进程,发现log经常只有前十几秒甚至一两秒。改成在A内部abort(), 发现log还是不全,改成exit(0)之后正常了。网上查到,exit()保证会flush stdout.
那么假如还是采用kill,是否有办法让它flush?
kill 默认给程序发出SIGTERM信号,程序可以自己设置收到该信号后如何处理;ctrl+c发出SIGINT信号,也可以设置处理方式;kill -9发出的是SIGKILL,程序不会收到信号,直接被终止。
#include <csignal>
void signalHandler( int signum )
{
cout << "Interrupt signal (" << signum << ") received.\n";
fflush(stdout);
exit(signum);
}
int main(){
signal(SIGINT, signalHandler);
signal(SIGTERM, signalHandler);
// 原来的代码...
}