No Unix, uma chamada para `Exec` 
 nunca retorna  se for bem -sucedido. Aqui está o porquê: 
 * 
 Substituição, não execução: `Exec` não * executa * um novo programa no sentido tradicional. Ele * substitui * a imagem do processo atual pela imagem do novo programa. Isso significa que o processo original desaparece essencialmente, e o novo programa toma seu lugar.  
 * 
 Transferência de controle direto: A chamada do sistema `Ex 'transfere diretamente o controle para o novo programa sem retornar ao chamador. É como se o processo original fosse "trocado" para o novo.   
 Exemplo:   `` `c 
 #include 
 
 
 int main () { 
 // tentam substituir o processo atual por "ls -l" 
 if (execlp ("ls", "ls", "-l", null) ==-1) { 
 // só chega a isso se o Execlp falhar 
 Perror ("Execlp falhou"); 
 retornar 1; 
 } 
 // Esta linha nunca será alcançada 
 printf ("Isso nunca será impresso. \ n"); 
 retornar 0; 
 } 
 `` ` 
 
  Por que `Exec` é útil  
 
 *  Eficiência: Evita a sobrecarga de criar um novo processo e gerenciar seu espaço de memória. 
 *  Controle direto: Fornece um mecanismo para um processo para fazer a transição perfeita para outro programa. 
 
  Pontos -chave  
 
 * `Exec` variantes (` Execl`, `Execv`,` Execlp`, `Execvp`) têm o mesmo comportamento em termos de valores de retorno. 
 * Se `Exec` falhar (por exemplo, arquivo não encontrado, problemas de permissão), ele retorna` -1` e define `errno` para indicar o erro. 
 * Para fazer com que um programa execute outro e continue, você precisa usar o `fork` para criar um processo filho antes de ligar para o` Exec` na criança. 
 
 Deixe -me saber se você tiver outras perguntas sobre `Exec` ou processos no Unix!