我使用fwrite将程序的日志写入文件。碰巧的是,如果我的程序收到 SIG_KILL ,则不会刷新缓冲区,并且某些数据将丢失。当程序被强制完成时,有没有办法强制刷新缓冲区?
如果没有解决方案你们认为在缓冲区中有一个完整的信息行之后使用fflush()是一个好的意识吗?这样我就会在最糟糕的情况下失去一系列信息。
谢谢!
答案 0 :(得分:0)
如果您的进程获得真正的SIGKILL
,则您的进程无法执行任何操作,因为它会立即被操作系统杀死。
每the POSIX standard on signals:
...
当进程停止时,发送的任何其他信号 在该过程继续之前,该过程不得交付, 除SIGKILL外总是终止接收过程。
...
系统不允许对信号SIGKILL或 SIGSTOP设置为SIG_IGN。
...
系统不允许进程捕获信号SIGKILL和 SIGSTOP。
你无法抓住SIGKILL
,你也不能忽视它。