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!