2011-02-07 53 views
0

我寫了一個應用程序,它使用fork和execv來啓動另一個進程。我做了一個關於狀態通知的管道,並且從已啓動進程的主要條目中,我寫了一些字節來通知它已正確啓動。否則,由於寫入管道已在分叉過程中關閉,所以讀取返回0。有沒有辦法在UNIX中臨時禁用fd 2?

唯一的麻煩是當進程沒有啓動(缺席庫)時,我在stderr中收到一條消息。該消息寫入shell是什麼錯誤。我寧願安靜地做。但是,如果我在execv之前關閉(2),我不知道我想要的是什麼。我仍然想讓fd 2開放給stderr。

回答

1

推測應用程序根本不喜歡沒有stderr流。而不是

close(2); 

我想嘗試

int tmpfd = open("/dev/null", O_WRONLY); 
dup2(tmpfd, 2); 
close(tmpfd); 

當然,我們誠邀您加入錯誤處理。

+0

或`dup(1,2)`,如果父進程想要​​看到錯誤消息。 – 2011-02-07 09:14:34

0

謝謝你們兩位。我解決了將stderr重定向到/ dev/null的問題。但是,我必須啓動子進程兩次。首先,我會檢查它是否會啓動,並在第一次成功時再次啓動它。所以我有正確的默認stderr的子進程和失敗的情況下沒有shell輸出。

相關問題