我寫了一個應用程序,它使用fork和execv來啓動另一個進程。我做了一個關於狀態通知的管道,並且從已啓動進程的主要條目中,我寫了一些字節來通知它已正確啓動。否則,由於寫入管道已在分叉過程中關閉,所以讀取返回0。有沒有辦法在UNIX中臨時禁用fd 2?
唯一的麻煩是當進程沒有啓動(缺席庫)時,我在stderr中收到一條消息。該消息寫入shell是什麼錯誤。我寧願安靜地做。但是,如果我在execv之前關閉(2),我不知道我想要的是什麼。我仍然想讓fd 2開放給stderr。
我寫了一個應用程序,它使用fork和execv來啓動另一個進程。我做了一個關於狀態通知的管道,並且從已啓動進程的主要條目中,我寫了一些字節來通知它已正確啓動。否則,由於寫入管道已在分叉過程中關閉,所以讀取返回0。有沒有辦法在UNIX中臨時禁用fd 2?
唯一的麻煩是當進程沒有啓動(缺席庫)時,我在stderr中收到一條消息。該消息寫入shell是什麼錯誤。我寧願安靜地做。但是,如果我在execv之前關閉(2),我不知道我想要的是什麼。我仍然想讓fd 2開放給stderr。
推測應用程序根本不喜歡沒有stderr流。而不是
close(2);
我想嘗試
int tmpfd = open("/dev/null", O_WRONLY);
dup2(tmpfd, 2);
close(tmpfd);
當然,我們誠邀您加入錯誤處理。
謝謝你們兩位。我解決了將stderr重定向到/ dev/null的問題。但是,我必須啓動子進程兩次。首先,我會檢查它是否會啓動,並在第一次成功時再次啓動它。所以我有正確的默認stderr的子進程和失敗的情況下沒有shell輸出。
或`dup(1,2)`,如果父進程想要看到錯誤消息。 – 2011-02-07 09:14:34