stratégie d'attribution PID dans Windows / Utilisation pour nommer les fichiers PIDs temporaires

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

  •  13-09-2019
  •  | 
  •  

Question

  1. Quelle est la politique d'affectation PID dans Windows? d'essais répétés d'un processus d'appel _getpid () indique l'affectation non séquentielle (3548,3344,3628,2748,4872,2360).

  2. Compte tenu de la cession non séquentielle observée PIDs, est-il possible pour deux processus différents avec le même pid à exécuter étroitement dans le temps les uns des autres? Il est évident que les processus ne seraient pas en cours d'exécution simultanément.

  3. est-il particulièrement judicieux d'utiliser un PID dans le nommage des fichiers temporaires?

J'écriture d'un programme qui interagit avec un autre exécutable en générant les fichiers d'entrée nécessaires, en appelant l'exécutable, et la lecture des fichiers de sortie générés à partir dudit fichier exécutable. En cas de résiliation nettoyer les fichiers intermédiaires sont supprimés.

Ma préoccupation est que si les fichiers temporaires ne sont pas nettoyés et sont réutilisés si PIDs il pourrait y avoir une ambiguïté entre les anciens fichiers temporaires qui n'ont pas été nettoyés et les nouveaux fichiers. Si l'exécutable ne génère pas un nouveau fichier de sortie en raison d'une erreur l'ancien fichier pourrait apparaître comme le fichier nouvellement créé, donc l'erreur ne peut pas être pris.

Il existe d'autres façons d'ajouter robustesse telles que l'utilisation d'un GUID pour les fichiers temporaires, en utilisant uniquement les répertoires propres pour les fichiers temporaires, ou de vérifier qu'il n'y a pas de fichiers qui partagent le même nom que le fichier de sortie cible. Certaines de ces techniques doivent être employées car certains sont à PIDs être répétée lors de redémarrage de la machine ou si la machine reste en cours d'exécution pour un laps de temps suffisant.

La question découle surtout de ma curiosité au sujet de pourquoi Windows allouer PIDs d'une manière différente alors * nix.

Était-ce utile?

La solution

En utilisant un PID de cette manière est problématique. J'ai vu des programmes qui utilisent le PID conjointement avec le temps UTC lorsque vous nommez des fichiers si vous vous retrouvez avec des fichiers nommés foo_55145_4a3667d3.log. L'autre option utiliser les options de FILE_ATTRIBUTE_TEMPORARY et FILE_FLAG_DELETE_ON_CLOSE dans le paramètre dwFlagsAndAttributes CreateFile() .

Autres conseils

ID de processus et les ID proviennent de la Filetage même pool sur Windows. Le système réutilisera ID de fil et le traiter immédiatement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top