我明白,一個守護進程不應該寫stdout
(和stderr
),因爲這不會是一次可從控制終端分離。但是,我可以重新打開stdout
到一個普通的文件,這樣我所有的原始日誌仍然可以工作嗎?這對我來說是非常好的和有用的。重新打開標準輸出到Linux守護進程的常規文件?
我想是這樣的分叉後,
freopen("/dev/null/", "r", stdin);
freopen("log", "w", stdout);
freopen("log", "w", stderr);
BOOST_LOG_TRIVIAL(info) << "daemonized!";
守護程序可以啓動(準確地說,它並沒有失敗,退出),並可以創建日誌文件。但是日誌是空的(沒有「守護進程!」)。這是不是正確的方法來守護?有人可以點亮一些光線嗎?
我認爲你有理由回到前面 - 如果你的'stdout'和/或'stderr'去一個終端,那麼它仍然是你的控制終端,你不能脫離它。我錯了嗎? –