2012-07-05 90 views
0

我有一個應用程序,父進程在分佈式服務器系統上啓動作業,如lsf/vnc。 現在我想要的是每當任何作業啓動時在其相應日誌中報告任何錯誤時,應將錯誤重定向到父進程的主stdout屏幕。這樣就不需要分別監控每項工作的日誌。 我從未在代碼中使用過管道/信號量,但如果需要,我可以瞭解到這一點。將stderr從一個進程寫入另一個進程C++/unix

請建議一些有效的解決方案。我正在開發Linux/Solaris平臺。

感謝

+0

所以你想要像'grep ERROR logs/allLogs。*> ttyConsole'(這不會工作,它只是僞代碼)。這可能有助於花一點時間編輯你的問題來說明你的用例。對我而言,很難將你的描述和標題與同一問題聯繫起來(爲什麼在標題中提到C++,你是否需要/期望修改C++代碼以達到你的要求?)祝你好運。 – shellter 2012-07-05 16:59:23

+0

你是如何開始LSF工作?你是否用'system(「lsrun ...」)來調用'lsrun';',你使用的是LSF C API(即'ls_execv()')還是其他一些機制? – 2012-07-06 09:55:06

回答

0

取決於你如何啓動子過程有不同的機制如何設置他們的標準手柄。

一般來說,您必須將他們的stderr句柄設置爲與您的stdout句柄相同。

請記住,這與您提到的「日誌」無關;這是關於你的主題說什麼(重定向stderr)。

0

如果您希望孩子的stderr與父母的stdout相同,那麼您可以簡單地啓動其stderr綁定到其stdout的父母。如果cmd是啓動父的命令,請嘗試:

$ cmd 2>&1 
0

你或許應該使用DUP2()庫調用,以複製STDERR在子進程所需的文件描述符,例如stdout的任何其他描述符,它可以在父進程之前打開,並在fork()之後由子進程繼承。 嘗試閱讀「dup2」呼叫的manula頁面。

相關問題