パイプがstdoutに書き込むときに、write()をパイプ出口プログラムにするのはなぜですか?

StackOverflow https://stackoverflow.com/questions/1586795

  •  22-09-2019
  •  | 
  •  

質問

Popen( "mycommand"、 "w")ファイル記述子に別のスレッドに書き込み、Popen()に渡されたコマンドがstdoutまたはstderrに出力されると、アプリケーションが終了するサーバーアプリケーションがあります。ただし、これは私のサーバーアプリケーションがINETDを介して呼び出された場合にのみ問題です。SSHを使用してサーバーを起動した場合、この問題はありません。

同様に、私のサーバーアプリケーションがPopen( "mycommand2"、 "r")ファイル記述子から別のスレッドで読み取られた場合、コマンドがpopen()に渡された場合、stderr(stdinが私のパイプに行く)に任意の出力が得られた場合、アプリケーションの終了。繰り返しますが、これはinetd召喚でのみ発生し、ssh召喚ではありません。

役に立ちましたか?

解決

パイプを開く前に、プロセスのすべてのFDを閉じる必要があります。その後、I/Oのリダイレクトを行う必要があります。これは、INETDの場合、プロセスがデーモンとして実行されるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top