3
  1. Windows の PID 割り当てポリシーとは何ですか? _getpid() を呼び出すプロセスを繰り返し実行すると、非順次割り当て (3548、3344、3628、2748、4872、2360) が示されます。

  2. 観測された PID の非順次割り当てを考えると、同じ pid を持つ 2 つの異なるプロセスが互いに時間的に近く実行される可能性はありますか? 明らかに、プロセスは同時に実行されません。

  3. 一時ファイルの名前付けに PID を使用することは特に賢明ではありませんか?

必要な入力ファイルを生成し、実行可能ファイルを呼び出し、生成された出力ファイルをその実行可能ファイルから読み取ることにより、別の実行可能ファイルと対話するプログラムを作成しています。CLEAN が終了すると、中間ファイルは削除されます。

私の懸念は、一時ファイルがクリーンアップされず、PID が再利用された場合、クリーンアップされていない古い一時ファイルと新しいファイルの間にあいまいさが生じる可能性があることです。エラーのために実行可能ファイルが新しい出力ファイルを生成しない場合、古いファイルが新しく作成されたファイルのように見える可能性があるため、エラーが捕捉されない場合があります。

一時ファイルに GUID を使用する、一時ファイルにクリーンなディレクトリのみを使用する、ターゲット出力ファイルと同じ名前を共有するファイルがないことを確認するなど、堅牢性を追加する方法は他にもあります。マシンの再起動時またはマシンが十分な時間実行されたままになっている場合は、PID が確実に繰り返されるため、これらの手法のいくつかを採用する必要があります。

質問は主に、Windows が PID を *nix とは異なる方法で割り当てる理由に関する私の好奇心から生じています。

4

2 に答える 2

3

プロセス ID とスレッド ID は、Windows の同じプールから取得されます。システムはスレッドとプロセス ID をすぐに再利用します。

于 2009-06-15T15:15:10.317 に答える
1

このように PID を使用することには問題があります。ファイルに名前を付けるときに現在の UTC 時間と組み合わせて PID を使用するプログラムを見たことがありますfoo_55145_4a3667d3.log。もう 1 つのオプションは、パラメータのFILE_ATTRIBUTE_TEMPORARYおよびFILE_FLAG_DELETE_ON_CLOSEオプションを に使用します。dwFlagsAndAttributesCreateFile()

于 2009-06-15T15:27:49.460 に答える