fork () e exec () confusão

2

Como quando fazemos um fork no processo atual, nosso processo como pai processa o processo-filho com as mesmas características, mas diferentes IDs de processo. Então, depois disso, quando executamos exec () em nosso processo filho, o processo interrompe a execução e nosso programa, que estava sendo executado em nosso processo filho interrompido, agora possui seu próprio processo.

Não é o mesmo que quando executamos nossos aplicativos em particular, após o qual cada aplicativo tem seu próprio processo e PID?

    
por Junior 24.09.2015 / 10:58

1 resposta

4

Sim, porque é assim que é feito no UNIX.

Não há chamada de sistema "executar aplicativo"; é sempre feito por pares fork / exec.

Por acaso, exec não não gera um novo PID. exec substitui o conteúdo do processo - a memória é descartada e todo um novo executável é carregado - mas o estado do kernel permanece o mesmo (arquivos abertos, variáveis de ambiente, diretório de trabalho, usuário , etc.), e o PID permanece o mesmo.

Mais informações, se estiver interessado:

  • vfork é como fork , exceto que deve sempre ser emparelhado com exec e é útil quando fork não funciona, como em ucLinux.

  • clone é o novo fork (a função fork de hoje usa clone nos bastidores), mas faz muito mais, incluindo a criação de novos processos que compartilham o mesmo memória (em vez de duplicá-lo, como fork ) e chamamos esses segmentos.

por 24.09.2015 / 11:18