política de asignación de PID en Windows / Uso PID para nombrar los archivos temporales

StackOverflow https://stackoverflow.com/questions/996649

  •  13-09-2019
  •  | 
  •  

Pregunta

  1. ¿Cuál es la política de asignación de PID en Windows? Repetidas ejecuciones de un proceso llamando _getpid () indica la asignación secuencial no (3548,3344,3628,2748,4872,2360).

  2. Dada la asignación secuencial no observada de PIDs, es posible que los dos proceso diferente con el mismo pid para ser ejecutado de cerca en el tiempo uno de otro? Es evidente que los procesos no estarían funcionando al mismo tiempo.

  3. Es particularmente prudente utilizar un PID en la denominación de los archivos temporales?

Estoy escribiendo un programa que interactúa con otro ejecutable mediante la generación de los archivos de entrada requeridos, llamando al ejecutable, y la lectura de los archivos de salida generados a partir de dicho ejecutable. A la terminación limpia se eliminan los archivos intermedios.

Mi preocupación es que si los archivos temporales se limpian y si se vuelven a utilizar los PID podría haber una ambigüedad entre viejos archivos temporales que no han sido limpiados y los nuevos archivos. Si el ejecutable no genera un nuevo archivo de salida debido a un error en el archivo de edad podría aparecer como el archivo recién creado, por lo que el error no puede ser capturado.

Hay otras maneras de añadir robustez como el uso de un GUID para los archivos temporales, utilizando sólo los directorios limpios para archivos temporales, o verificar que no hay archivos que comparten el mismo nombre que el archivo de salida de destino. Algunas de estas técnicas deben emplearse desde PIDs son ciertas para ser repetido a máquina reinicio o si la máquina se ha dejado abierta por una cantidad de tiempo suficiente.

La pregunta se deriva principalmente de mi curiosidad con respecto a por qué Windows asignar los PID de una manera diferente, entonces * nix.

¿Fue útil?

Solución

Uso de un PID de esta manera es problemático. He visto programas que utilizan el PID en conjunto con la hora UTC actual al nombrar archivos por lo que terminan con archivos denominados foo_55145_4a3667d3.log. La otra opción, usa las opciones FILE_ATTRIBUTE_TEMPORARY y FILE_FLAG_DELETE_ON_CLOSE en el parámetro dwFlagsAndAttributes a CreateFile() .

Otros consejos

Los identificadores de procesos y subprocesos identificaciones provienen de la misma fuente en Windows. El sistema volverá a utilizar IDs de rosca y de proceso inmediatamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top