2009-06-15 50 views
1
  1. 什麼是Windows中的PID分配策略?重複運行調用_getpid()的進程表示非順序分配(3548,3344,3628,2748,4872,2360)。Windows中的PID分配策略/使用PID來命名臨時文件

  2. 鑑於所觀察到的PID的非順序分配,是否有可能使兩個具有相同pid的不同進程在時間上彼此緊密地執行?顯然這些過程不會同時運行。

  3. 在命名臨時文件中使用PID特別不明智嗎?

我正在寫通過生成所需的輸入文件,調用可執行文件,並從閱讀中產生的輸出文件與其他可執行交互的程序說可執行文件。 CLEAN終止後,中間文件被刪除。

我擔心的是,如果臨時文件沒有被清理,並且PID被重複使用,那麼舊的臨時文件還沒有被清理,並且新文件之間可能存在歧義。如果可執行文件由於錯誤而未生成新的輸出文件,則舊文件可能會顯示爲新創建的文件,因此可能無法捕獲錯誤。

還有其他一些方法可以增強健壯性,例如對臨時文件使用GUID,僅對臨時文件使用乾淨的目錄,或者驗證是否沒有與目標輸出文件共享相同名稱的文件。應該採用這些技術中的一些技術,因爲在機器重啓時或者如果機器保持足夠的時間運行,肯定會重複PID。

這個問題主要來自我對Windows爲什麼以不同方式分配PID的好奇心,即* nix。

回答

1

以這種方式使用PID是有問題的。命名文件時,我已經看到了將PID與當前UTC時間結合使用的程序,因此最終得到的文件名爲foo_55145_4a3667d3.log。另一個選項使用dwFlagsAndAttributes參數中的FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE選項至CreateFile()

2

進程ID和線程ID來自Windows上的同一個池。系統將立即重用線程和進程ID。