1

別のスレッドで popen("myCommand", "w") ファイル記述子に書き込むサーバー アプリケーションがあり、popen() に渡されたコマンドが標準出力または標準エラー出力に出力される場合、アプリケーションは終了します。ただし、これはサーバー アプリケーションが inetd 経由で呼び出された場合のみの問題であり、ssh を使用してサーバーを起動した場合、この問題は発生しません。

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

4

1 に答える 1

0

パイプを開く前に、プロセスの既存の fd をすべて閉じてから、i/o リダイレクトを行う必要があります。これは、inetd の場合、プロセスがデーモンとして実行されるためです。

于 2009-10-19T03:58:08.343 に答える