2011-02-07 4 views
0

私はforkとexecvを使って別のプロセスを起動するアプリケーションを書いています。ステータスに関する通知用のパイプを作成し、起動されたプロセスのメインエントリから、正しく起動されたことを通知するためにいくつかのバイトを書きます。それ以外の場合は、書き込みパイプがforkされたプロセスで閉じられているため、readは0を返します。UNIXでfd 2を一時的に無効にする方法はありますか?

唯一の問題は、プロセスが起動しない場合(ライブラリがない場合)、これについてstderrにメッセージが表示されることです。メッセージは、間違っているとシェルに書き込まれます。私は静かにそれをやりたいです。しかし、私がexecvの前にclose(2)をしても、私は何が欲しいのかというメッセージを持っていません。それでも私はstdrのためにfd 2を開いたままにしたいと思います。

答えて

1

おそらく、アプリケーションは標準ストリームをまったく持たないことを好まないでしょう。むしろ

close(2); 

よりも、私はあなたが心からエラー処理を追加するために招待されている。もちろん、

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

を試してみました。

+0

親プロセスがエラーメッセージを見たい場合は、 'dup(1,2)'。 –

0

ありがとうございます。私はstderrを/ dev/nullにリダイレクトすることでこの問題を解決しました。しかし、子プロセスを2回起動する必要があります。最初に、stderrが抑制された状態で起動されたかどうかを確認し、最初に成功した場合には起動します。だから私は子プロセスのための正しいデフォルトのstderrを持っていて、失敗した場合はシェルの出力はありません。

関連する問題