Voltar à lista
Linux x86_64Processos & threads#59

execve

Substitui a imagem do processo atual por um novo programa.

Descrição

Não cria um novo processo — o PID permanece o mesmo, mas código, dados, pilha e heap são completamente substituídos pelo novo executável. Combinado com `fork`/`clone`/`vfork`, forma o padrão fork+exec característico do Unix para iniciar novos programas.

Header: unistd.hman 2

Nota

Descritores de arquivo abertos sobrevivem ao exec, exceto os marcados com a flag close-on-exec (FD_CLOEXEC) — por isso é boa prática abrir descritores sensíveis já com O_CLOEXEC.

Assinatura

int execve(const char * pathname, char *const[] argv, char *const[] envp);

Parâmetros

ParâmetroTipoDescrição
pathnameconst char *Caminho do executável (binário ou script com shebang).
argvchar *const[]Array de argumentos, terminado em NULL; argv[0] convencionalmente é o nome do programa.
envpchar *const[]Array de variáveis de ambiente no formato "NOME=valor", terminado em NULL.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1pathnameconst char *
rsiargumento 2argvchar *const[]
rdxargumento 3envpchar *const[]

Valor de retorno

Não retorna em sucesso (o programa antigo deixou de existir); -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EAGAIN(11)
Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
ENOENT(2)
Arquivo ou diretório inexistente.
ENOEXEC(8)
Formato de executável inválido.
ENOMEM(12)
Memória insuficiente para completar a operação.
E2BIG(7)
Lista de argumentos grande demais.
ELOOP(40)
Excesso de níveis de links simbólicos (loop de symlinks).

Relacionadas