2016-11-21 63 views
0

我使用fwrite將我的程序的日誌寫入文件。碰巧如果我的程序收到一個SIG_KILL緩衝區不會被刷新,並且一些數據將會丟失。程序強制結束時,有什麼辦法可以強制刷新緩衝區嗎?C - 在強制終止時刷新文件緩衝區

如果沒有解決方案,你們認爲在緩衝區中有一行完整的信息之後使用fflush()會是一個好的理想嗎?這樣我就會在最壞的情況下丟失一行信息。

謝謝!

+1

不要強制用戶使用'SIGKILL'來終止你的程序嗎?如果程序如此楔入,它通常被認爲是最後的手段,否則不能被終止,這是爲什麼它不能被阻止或處理。 – EOF

+0

我不強迫它。但想象一下,有人記得使用Ctrl + ALt + Del並關閉進程,在這種情況下,我不能讓用戶丟失緩衝區中的所有信息...... –

+3

不。如果用戶決定使用SIGKILL這個程序不必要的,這是*用戶自己的錯誤*。如果你讓你的程序忽略所有其他信號,這是*你的錯誤* – EOF

回答

0

如果您的進程得到真正的SIGKILL,那麼您的進程無法執行任何操作,因爲它會立即被操作系統殺死。

the POSIX standard on signals

...

當進程停止,發送到 任何附加信號的過程中不得,直到該進程繼續傳遞, 除了SIGKILL這總是終止接收過程

...

系統不得允許信號SIGKILL或SIGSTOP 的動作設置爲SIG_IGN。

...

系統應不允許過程捕捉的信號SIGKILL和SIGSTOP 。

你不能趕上SIGKILL,你不能忽略它。