criterio di assegnazione PID in Windows / Utilizzo di PID per la denominazione dei file temporanei

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

  •  13-09-2019
  •  | 
  •  

Domanda

  1. Qual è il criterio di assegnazione del PID in Windows? corse ripetute di un processo chiamando _getpid () indica l'assegnazione sequenziale non (3548,3344,3628,2748,4872,2360).

  2. Dato l'assegnazione sequenziale non osservata di PID, è possibile che due processi differenti con lo stesso PID da eseguire strettamente in tempo l'una dall'altra? Ovviamente i processi non sarebbero eseguiti contemporaneamente.

  3. E 'particolarmente saggio usare un PID nella denominazione dei file temporanei?

Sto scrivendo un programma che interagisce con un altro eseguibile generando i file di input richiesti, chiamando l'eseguibile, e leggendo i file di output generati da tale eseguibile. In caso di risoluzione pulire i file intermedi vengono eliminati.

La mia preoccupazione è che non se i file temporanei sono ripulito e se PID vengono riutilizzati ci potrebbe essere un ambiguità tra i vecchi file temporanei che non sono stati puliti e nuovi file. Se l'eseguibile non genera un nuovo file di output a causa di un errore il vecchio file potrebbe apparire come il file appena creato, quindi l'errore non può essere catturato.

Ci sono altri modi per aggiungere robustezza come l'utilizzo di un GUID per i file temporanei, utilizzando solo le directory pulite per i file temporanei, o la verifica che non ci sono i file che condividono lo stesso nome del file di output di destinazione. Alcune di queste tecniche dovrebbero essere impiegati dal PID sono determinati da ripetere al riavvio della macchina o se la macchina viene lasciata aperta per un tempo sufficiente.

La domanda deriva principalmente dalla mia curiosità per quanto riguarda il motivo per cui di Windows allocare PID in modo diverso allora * nix.

È stato utile?

Soluzione

Utilizzo di un PID in questo modo è problematico. Ho visto i programmi che utilizzano il PID in concomitanza con l'ora UTC corrente quando la denominazione dei file così si finisce con i file denominati foo_55145_4a3667d3.log. L'altra opzione utilizzare le opzioni FILE_ATTRIBUTE_TEMPORARY e FILE_FLAG_DELETE_ON_CLOSE nel parametro dwFlagsAndAttributes a CreateFile() .

Altri suggerimenti

ID di processo e ID di filettature provengono dalla stessa piscina su Windows. Il sistema sarà immediatamente riutilizzare gli ID filo e di processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top