1. Windows中的PID分配策略是什么?重复运行调用 _getpid() 的进程表示非顺序分配 (3548,3344,3628,2748,4872,2360)。

  2. 鉴于观察到的 PID 的非顺序分配,具有相同 pid 的两个不同进程是否有可能在时间上紧密地执行?显然,这些进程不会同时运行。

  3. 在临时文件的命名中使用PID是不是特别不明智?

我正在编写一个程序,该程序通过生成所需的输入文件、调用可执行文件并从所述可执行文件读取生成的输出文件来与另一个可执行文件交互。CLEAN 终止后,中间文件将被删除。

我担心的是,如果临时文件没有被清理,并且 PID 被重复使用,那么未清理的旧临时文件和新文件之间可能会存在歧义。如果可执行文件由于错误而未生成新的输出文件,则旧文件可能会像新创建的文件一样出现,因此可能无法捕获错误。

还有其他方法可以增加稳健性,例如对临时文件使用 GUID、仅对临时文件使用干净的目录,或者验证不存在与目标输出文件同名的文件。应采用其中一些技术,因为 PID 肯定会在计算机重新启动或计算机运行足够长的时间后重复出现。

这个问题主要源于我对为什么 Windows 以与 *nix 不同的方式分配 PID 的好奇心。

有帮助吗?

解决方案

以这种方式使用 PID 是有问题的。我见过一些程序在命名文件时将 PID 与当前 UTC 时间结合使用,因此最终会得到名为 foo_55145_4a3667d3.log. 。另一个选项使用 FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE 中的选项 dwFlagsAndAttributes 参数为 CreateFile().

其他提示

Windows 上的进程 ID 和线程 ID 来自同一池。系统将立即重用线程和进程ID。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top