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
é comofork
, exceto que deve sempre ser emparelhado comexec
e é útil quandofork
não funciona, como em ucLinux. -
clone
é o novofork
(a funçãofork
de hoje usaclone
nos bastidores), mas faz muito mais, incluindo a criação de novos processos que compartilham o mesmo memória (em vez de duplicá-lo, comofork
) e chamamos esses segmentos.