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 comexece é útil quandoforknão funciona, como em ucLinux. -
cloneé o novofork(a funçãoforkde hoje usaclonenos 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.