2009-06-15 4 views
1
  1. Quelle est la règle d'attribution PID sous Windows? Les exécutions répétées d'un processus appelant _getpid() indiquent une affectation non séquentielle (3548,3344,3628,2748,4872,2360). Compte tenu de l'affectation non séquentielle observée des PID, est-il possible que deux processus différents avec le même pid soient exécutés étroitement dans le temps les uns des autres? De toute évidence, les processus ne seraient pas exécutés simultanément.Stratégie d'attribution PID sous Windows/Utilisation de PID pour nommer les fichiers temporaires

  2. Est-il particulièrement imprudent d'utiliser un PID dans la dénomination des fichiers temporaires?

J'écris un programme qui interagit avec un autre exécutable en générant les fichiers d'entrée nécessaires, appelant l'exécutable, et la lecture des fichiers de sortie générés à partir dudit exécutable. Lors de la terminaison CLEAN, les fichiers intermédiaires sont supprimés. Mon problème est que si les fichiers temporaires ne sont pas nettoyés et si les PID sont réutilisés, il peut 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 peut apparaître comme le fichier nouvellement créé, ainsi l'erreur peut ne pas être détectée. Il existe d'autres moyens d'ajouter de la robustesse, comme l'utilisation d'un GUID pour les fichiers temporaires, l'utilisation de répertoires propres pour les fichiers temporaires ou la vérification de l'absence de fichiers partageant le même nom que le fichier de sortie cible. Certaines de ces techniques doivent être utilisées car les PID sont sûrs d'être répétés au redémarrage de la machine ou si la machine est laissée en fonctionnement pendant une durée suffisante.

La question provient principalement de ma curiosité concernant pourquoi Windows attribuent des PID d'une manière différente que * nix.

Répondre

1

L'utilisation d'un PID de cette manière est problématique. J'ai vu des programmes qui utilisent le PID en conjonction avec l'heure UTC en cours lorsque vous nommez des fichiers afin que vous finissiez avec des fichiers nommés foo_55145_4a3667d3.log. L'autre option utilise les options FILE_ATTRIBUTE_TEMPORARY et FILE_FLAG_DELETE_ON_CLOSE dans le paramètre dwFlagsAndAttributes à CreateFile().

2

Les ID de processus et les ID de thread proviennent du même pool sous Windows. Le système réutilisera immédiatement les ID de thread et de processus.

Questions connexes