パイプがstdoutに書き込むときに、write()をパイプ出口プログラムにするのはなぜですか?
質問
Popen( "mycommand"、 "w")ファイル記述子に別のスレッドに書き込み、Popen()に渡されたコマンドがstdoutまたはstderrに出力されると、アプリケーションが終了するサーバーアプリケーションがあります。ただし、これは私のサーバーアプリケーションがINETDを介して呼び出された場合にのみ問題です。SSHを使用してサーバーを起動した場合、この問題はありません。
同様に、私のサーバーアプリケーションがPopen( "mycommand2"、 "r")ファイル記述子から別のスレッドで読み取られた場合、コマンドがpopen()に渡された場合、stderr(stdinが私のパイプに行く)に任意の出力が得られた場合、アプリケーションの終了。繰り返しますが、これはinetd召喚でのみ発生し、ssh召喚ではありません。
解決
パイプを開く前に、プロセスのすべてのFDを閉じる必要があります。その後、I/Oのリダイレクトを行う必要があります。これは、INETDの場合、プロセスがデーモンとして実行されるためです。
所属していません StackOverflow