【发布时间】:2016-11-21 23:09:05
【问题描述】:
我使用 fwrite 将程序的日志写入文件。碰巧的是,如果我的程序收到 SIG_KILL 缓冲区将不会被刷新并且一些数据将会丢失。当程序被强制完成时,有什么方法可以强制刷新缓冲区?
如果没有解决方案,你们认为在缓冲区中有一行完整的信息之后使用 fflush() 是一个好主意吗?这样,在最坏的情况下,我只会丢失一行信息。
谢谢!
【问题讨论】:
-
不要强制用户使用
SIGKILL来终止你的程序?如果程序被阻塞到无法以其他方式终止,这通常应该是最后的手段,这就是它无法被阻止或处理的原因。 -
我不强迫它。但是想象一下有人记得使用 Ctrl+ALt+Del 并关闭进程,在这种情况下,我不能让用户丢失缓冲区中的所有信息......
-
没有。如果用户决定不必要地
SIGKILL程序,那是用户自己的错。如果你让你的程序忽略所有其他信号,那是你的错 -
Ctrl+Alt+Del 是什么意思?要 SIGKILL 进程,请按 Ctrl-C。
-
Ctrl-C 是 SIGINT,不是 SIGKILL。