Irá sobrescrever para um arquivo executável afeta um processo que está executando o arquivo executável original?

3

Quando um arquivo executável é executado em um processo, se o arquivo executável for sobrescrito ou excluído e depois recriado por reinstalação, o processo executará novamente o novo arquivo executável?

A resposta para a pergunta depende de

  • se o executável é executado como um serviço / daemon no processo ou não?

  • o sistema operativo, e. Ubuntu, Windows, ...?

  • se a reinstalação é de um arquivo de instalação (por exemplo, deb no Ubuntu, msi no Windows) ou da criação de seu código-fonte?

Aqui estão alguns exemplos:

  • No Ubuntu, quando um processo executa um arquivo executável e quando eu sobrescrevo o arquivo executável, pela reinstalação manual via configure , make e make install em seu código-fonte, o processo continua para executar o arquivo executável original, em vez do novo arquivo executável.

  • Ouvi dizer que no Windwos 10, quando um processo executa um arquivo executável como um serviço, se reinstalarmos o arquivo executável por meio de seu arquivo msi installer, o processo do serviço será reiniciado para executar o novo arquivo executável .

Obrigado.

    
por Tim 22.03.2017 / 22:41

1 resposta

1

Eu não sei a resposta para todas as suas (sub) perguntas, especialmente quando se trata de serviços do Windows. Ainda assim, posso explicar a diferença geral entre o comportamento do Windows e do Linux.

Eu entendo "sobrescrever" como escrevendo para um arquivo já existente. A alternativa é excluir o arquivo antigo e criar um arquivo novo com o mesmo nome. Eu esperaria que todos os instaladores fizessem isso da última vez, porque sobrescrever um código em execução é um problema (e um sinal de alarme para antivírus, etc.).

Então, tecnicamente, quase nunca "sobrescreve". Então, o que dizer de deletar e criar de novo?

Sistemas de arquivos baseados em inode, como a família ext no Linux, permitem excluir um arquivo que está em uso. Janelas com NTFS ou FAT não se comportam assim. Leia mais aqui: O que o Linux está fazendo de forma diferente que me permite remover / substituir arquivos em que o Windows iria reclamar que o arquivo está atualmente em uso?

Um instalador no Windows pode tentar (ou não) interromper processos que usem determinado arquivo, se ele estiver ciente deles. Caso contrário, não poderia fazer seu trabalho porque o sistema de arquivos negaria a exclusão do arquivo. Os instaladores do Linux não precisam se preocupar com isso em geral.

Esse comportamento no Linux é tão útil que tendemos a imitá-lo para sistemas de arquivos que não o suportam sozinhos. Leia a minha resposta para outra pergunta (seção "o contexto") para obter algumas informações.

will the process rerun the new executable file?

Em geral: não. Mas como o processo deve ser finalizado no Windows, o instalador (ou um cão de guarda de algum tipo) pode "sentir-se obrigado" a ressuscitá-lo - é claro, com o novo executável, porque o antigo já foi excluído. No Linux, o processo pode executar o executável original como se nada tivesse acontecido. No entanto, alguns instaladores no Linux podem reiniciar processos (por exemplo, daemons) para forçar a execução do novo executável.

No final, vamos ver o que acontece quando o instalador é preguiçoso e faz apenas as tarefas necessárias para substituir o executável pelo novo. No Windows ele tem que matar o processo, então ele substitui o arquivo; o processo não é mais. No Linux, o instalador simplesmente substitui o arquivo e o processo sobrevive.

    
por 23.03.2017 / 00:37