1

私の C プログラムは Solaris 上で実行されており、信号の受信など、何らかの状況が発生したときに自動的に再起動する必要があります。現在、この機能を実装するために exec ファミリ関数を使用することを検討していますが、3 つの問題があります。

  1. 実行前にファイル記述子を閉じる必要があることはわかっていますが、プログラムはサードパーティのライブラリを使用しており、これらのライブラリもファイルを開いています。これらのファイル記述子を閉じるにはどうすればよいですか?
  2. ファイル記述子を除いて、解放する必要があるシステム リソースはありますか?
  3. exec ファミリ関数を除いて、この関数を実装する他の方法はありますか?
4

2 に答える 2

2

関数の exec ファミリのPOSIX 仕様は、何を心配する必要があるかを正確に示しています。説明のセクションを注意深く読んで、何か問題があるかどうかを確認してください (例: 信号処理)。ファイル記述子以外のリソースを解放する必要はないと思います。

それらが何であるかを知るか、それらすべてをループする以外に、すべてのファイル記述子を閉じる方法はなく、それらの close-on-exec フラグを設定する方法もありません。(例)この回答を参照してください。

メインプログラムが終了した場合に再起動する「ウォッチャー」プロセスまたはスクリプトを用意することをお勧めします。

[アップデート]

開いているすべてのファイル記述子を列挙したり、閉じたりする標準 (POSIX) の方法はありませんが、それを行うための Solaris 固有のインタフェースがあります。(これは私にとってニュースでした。)以下の alanc のコメントを参照してください。

于 2013-07-15T03:47:05.263 に答える