Quando você chama um método da família exec , ele não cria um novo processo; em vez disso, exec substitui a memória do processo atual e o conjunto de instruções, etc., pelo processo que você deseja executar.
Como exemplo, você deseja executar grep usando exec. bash é um processo (que possui memória separada, espaço de endereço). Agora, quando você chamar exec(grep) , exec substituirá a memória, o espaço de endereço, o conjunto de instruções etc do processo atual por grep's data. Isso significa que bash processo não existirá mais. Como resultado, você não pode voltar ao terminal depois de concluir o comando grep . É por isso que os métodos da família exec nunca retornam. Você não pode executar nenhum código após o exec; é inacessível.