Skip to main content

execve

Function execve 

Source
pub fn execve(
    path: &CStr,
    argv: &[&CStr],
    envp: &[&CStr],
) -> Result<Infallible, Errno>
Expand description

Remplace l’image mémoire du processus courant par l’exécutable situé à path, avec les arguments argv et l’environnement envp.

Cf. docs/specs/layer-0/family-process.md. En cas de succès, ne retourne jamais (le processus exécute désormais le nouveau binaire) — d’où le type Result<Infallible, Errno> (ADR-021 convention 5). En cas d’échec, retourne Err(errno).

argv / envp sont des tranches de CStr ; le wrapper en construit les tableaux de pointeurs C NULL-terminés via CStrArray. Par convention POSIX, argv[0] est le nom du programme ; une tranche vide est acceptée par le kernel (argc == 0).

Pour exécuter un binaire désigné par un fd (sans race sur le chemin), préférer execveat avec [ExecveatFlags::EMPTY_PATH].

§Errors

  • [Errno::EACCES] : path n’est pas exécutable, un répertoire du chemin interdit la traversée, ou le système de fichiers est monté noexec.
  • [Errno::ENOENT] : path (ou l’interpréteur #! d’un script) n’existe pas.
  • [Errno::ENOEXEC] : path existe mais n’est pas dans un format exécutable reconnu (ni ELF, ni script avec #!).
  • [Errno::E2BIG] : argv + envp dépassent la limite kernel (ARG_MAX).
  • ENOMEM, ETXTBSY, ELOOP, … : cf. execve(2).