0

以下が私のプロセスを危険にさらさないことを確認したいと思います。

Solarisプログラムは、(C ++ wcoutストリームを介して)stdoutに大量に書き込みます。出力はトレースに使用されるため、テストおよび分析中に、プログラマー/テスターは何が起こるかを簡単に観察できます。ただし、プログラムは実際にはサーバープロセスであるため、製品版では、コンソールが接続されていない状態でデーモンとして実行され、すべてのトレース出力がファイルに書き込まれます。

コンソールのないプログラムの場合、stdoutはnulにリダイレクトされると思います。この場合、すべて問題ないと思います。ただし、十分な実行時間の後にメモリまたはディスクスペースの問題が発生する可能性があるように、stdout出力がどこかにバッファリングされていないことを確認したいと思います。

注:トレース出力が大きくなりすぎるため、トレース出力をファイルにリダイレクトすることはできません。代わりに、独自のファイルトレースメカニズムにより、新しいファイルが作成され、古いファイルが削除されて、常に一定量のトレースが維持されます。

4

2 に答える 2

2

それはデーモンがどのように開始されるかによると思います。デーモンプロセスが作成されるとき、ストリームは何らかの方法で処理される必要があります(たとえば、ストリームは現在のプロセスから切り離される必要があります。少なくとも、デーモンが手動で開始されたシェルが終了したときにデーモンを終了する必要があります)。

于 2012-10-11T09:25:16.060 に答える
0

デーモンの起動方法によって異なります。cronジョブとして開始された場合、コマンドラインで出力をリダイレクトしない限り、出力はキャプチャされ、crontabエントリの所有者にメールで送信されます。(ただし、cronジョブとして開始されたプログラムは、実際にはデーモンではありません。)

より一般的には、すべてのプロセスは別のプログラムから開始されます(initプロセスを除く)。ほとんどの場合、そのプログラムはシェルであり( crontabシェルを呼び出してジョブを開始することもあります)、コマンドはコマンドラインとして提供されます。また、コマンドラインで好きな場所に出力をリダイレクトできます。/dev/nullあなたのような場合に人気のある選択肢です。ほとんどのデーモンはrcファイルから開始されます。の下にインストールされたシェルスクリプト。出力をそこにリダイレクトするだけです。/etc/rcn.d

または、標準出力ではなく、何らかの形式のローテーションログを使用するようにコードを書き直してください。

于 2012-10-11T12:25:18.297 に答える