arquivos pid são escritos por alguns programas para gravar seu ID de processo enquanto estão iniciando. Isso tem várias finalidades:
- É um sinal para outros processos e usuários do sistema que esse programa específico está executando ou, pelo menos, foi iniciado com êxito.
- Permite escrever um script muito fácil de verificar se está em execução e emitir um comando
kill
simples, se alguém quiser terminá-lo. - É uma maneira barata de um programa ver se uma instância anterior em execução não foi concluída com êxito.
A simples presença de um arquivo pid não garante que esse ID de processo específico esteja em execução, é claro, portanto, esse método não é 100% infalível, mas "bom o suficiente" em muitos casos. Verificar se um determinado PID existe na tabela de processos não é totalmente portátil em sistemas operacionais semelhantes a UNIX, a menos que você queira depender do utilitário ps
, que pode não ser desejável para chamar em todas as instâncias (e acredito que alguns UNIX- como sistemas operacionais implementam ps
de maneira diferente).
Os arquivos de bloqueio são usados pelos programas para garantir que duas instâncias separadas (bem-comportadas) de um programa, que podem estar sendo executadas simultaneamente em um sistema, não acessem outra coisa ao mesmo tempo. A ideia é antes que o programa acesse seu recurso, ele verifique a presença de um arquivo de bloqueio e, se o arquivo de bloqueio existir, ou cometer erros ou esperar que ele desapareça. Quando ele não existe, o programa que deseja "adquirir" o recurso cria o arquivo e, em seguida, outras instâncias que podem ser encontradas posteriormente aguardarão a conclusão desse processo. Naturalmente, isso pressupõe que o programa "adquirir" o bloqueio libera-o e não esquece de excluir o arquivo de bloqueio.
Isso funciona porque o sistema de arquivos sob todos os sistemas operacionais semelhantes ao UNIX impõe serialização , o que significa que apenas uma mudança no sistema de arquivos realmente acontece a qualquer momento. Mais ou menos como bloqueios com bancos de dados e tal.