política de atribuição de PID no Windows / Usando PIDs para nomear arquivos temporários

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

  •  13-09-2019
  •  | 
  •  

Pergunta

  1. Qual é a política de atribuição de PID no Windows? corridas repetidas de um _getpid chamando processo () indica a atribuição sequencial não (3548,3344,3628,2748,4872,2360).

  2. Dada a atribuição sequencial não observado de PIDs, é possível que dois processos diferentes com o mesmo PID a ser executado em estreita colaboração com o tempo um do outro? Obviamente, os processos não seriam executados simultaneamente.

  3. É particularmente prudente usar um PID na nomeação de arquivos temporários?

Eu estou escrevendo um programa que interage com outro executável, gerando os arquivos de entrada necessários, chamando o executável, e ler os arquivos de saída gerados a partir da dita executável. Após o término limpar os arquivos intermediários são excluídos.

A minha preocupação é que, se os arquivos temporários não são limpos e se PIDs são reutilizados poderia haver uma ambiguidade entre antigos arquivos temporários que não foram limpos e novos arquivos. Se o executável não gera um novo arquivo de saída devido a um erro no arquivo de idade poderia aparecer como o arquivo recém-criado, portanto, o erro não pode ser capturado.

Existem outras maneiras de adicionar robustez como o uso de um GUID para os arquivos temporários, usando apenas diretórios limpas para arquivos temporários, ou verificar que não existem arquivos que compartilham o mesmo nome que o arquivo de saída de destino. Algumas destas técnicas devem ser empregadas desde PIDs são determinados a ser repetido após a reinicialização da máquina ou se a máquina estiver a funcionar durante um período de tempo suficiente.

A questão decorre principalmente da minha curiosidade sobre por que o Windows alocar PIDs de uma maneira diferente, então * nix.

Foi útil?

Solução

Usando um PID desta forma é problemático. Já vi programas que usam o PID em conjunto com a hora UTC atual ao nomear arquivos para que você acabar com arquivos chamados foo_55145_4a3667d3.log. A outra opção usar as opções FILE_ATTRIBUTE_TEMPORARY e FILE_FLAG_DELETE_ON_CLOSE no dwFlagsAndAttributes parâmetro para CreateFile() .

Outras dicas

IDs de processo e IDs de Tópicos vêm da mesma piscina no Windows. O sistema irá reutilizar threads e processar IDs imediatamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top