簡體   English   中英

可以在沒有終端的Unix進程上寫入stdout嗎?

[英]Ok to write to stdout on Unix process without terminal?

我想確保以下內容不會影響我的流程:

Solaris程序大量寫入stdout(通過C ++ wcout流)。 輸出用於跟蹤,因此在測試和分析期間,程序員/測試人員可以輕松地觀察發生的情況。 但該程序實際上是一個服務器進程,因此在生產版本中它將作為惡魔運行而無需連接控制台並將所有跟蹤輸出寫入文件。

我假設沒有控制台的程序將stdout重定向到nul,在這種情況下我猜一切都很好。 但是我想確保stdout輸出沒有在某處緩沖,以便在足夠的運行時間之后我們可能有內存或磁盤空間問題。

注意:我們無法將跟蹤輸出重定向到文件,因為這會變得太大。 相反,我們自己的文件跟蹤機制確保創建新文件並刪除舊文件以始終保持一定量的跟蹤而不是更多。

這取決於守護進程是如何啟動的,我想。 創建守護進程時,必須以某種方式處理流(例如,它們需要與當前進程分離,至少守護進程必須在手動啟動它的shell退出時終止)。

這取決於守護程序的啟動方式。 如果它作為cron作業啟動,則將捕獲輸出並將其郵寄給擁有crontab條目的任何人,除非您在命令行中重定向輸出。 (但是作為cron作業開始的程序並不是真正的守護進程。)

更一般地說,所有進程都是從另一個程序啟動的(init進程除外); 大多數情況下,該程序是一個shell(甚至crontab調用shell來啟動它的作業),該命令作為命令行給出。 您可以在命令行中將輸出重定向到任何地方; /dev/null是像你這樣的案例的流行選擇。 大多數守護進程都是從rc文件啟動的; .d . /etc/rc .d下安裝的shell腳本。 只需將輸出重定向到那里。

或者更好的是,重寫代碼以使用某種形式的旋轉日志,而不是標准輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM