extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
これらの関数の最初の引き数は、実行されるファイルのパス名である。
関数 execl(), execlp(), execle() の const char *arg とそれに続く省略部分は arg0, arg1, ..., argn とみなされる。 これらには、実行されるプログラムで利用可能な引き数のリストを指定する (引き数のリストは NULL で終端された文字列へのポインタから構成される)。 慣習として、最初の引き数は、実行されるファイル名 へのポインタにする。引き数のリストは必ず NULL で終わらなければならず、これらの関数は可変長引き数関数なので、 このポインタは (char *) NULL とキャストしなければならない。
関数 execv() と execvp() は、利用可能な引き数リスト (NULL で終端された文字列への ポインタの配列) を新しいプログラムに渡す。 慣習として、最初の引き数は実行されるファイル名へ のポインタにする。ポインタの配列は必ず NULL で終わらなければならない。
関数 execle() では新しいプロセスの環境も指定する。 環境は引き数リスト (パラメータリストもしくは追加のパラメータ を持った argv 配列へのポインタ) の最後の NULL ポインタに続けて指定する。 追加のパラメータは、 NULL で終端された文字列へのポインタの配列であり、 NULL ポインタで終わらなければならない。 他の関数では、現在のプロセスの外部変数 environ から新しいプロセス用の環境を与える。
関数 execlp() と execvp() は、指定されたファイル名がスラッシュ (/) を含んでいない場合、 シェルと同じ動作で実行可能なファイルを探索する。 検索パスは環境変数 PATH で指定されたパスである。 この変数が指定されていない場合、デフォルトPATHとして ``:/bin:/usr/bin'' が使用される。 また、いくつかのエラーが発生した場合の扱いが特殊である。
もしファイルが実行ファイルでない場合 (このとき呼び出そうとした execve(2) は EACCES を返す)、これらの関数は残りの検索パスの検索を続ける。 他にファイルが見つからなくなった場合グローバル変数 errno に EACCES を設定し復帰する。
ファイルのヘッダが実行形式として認識できない場合 (このとき呼び出そうとした execve(2) は ENOEXEC を返す)、これらの関数はそのファイルを最初の引き数としたシェル (/bin/sh) を実行する (これにも失敗した場合、これ以上の検索は行われない)。
ファイルを実行しようとしている間にエラーが発生した時の execlp() と execvp() のふるまいについて歴史的な慣習はあるが、伝統的に文書として記載されておらず、 POSIX 標準でも規定されていない。BSD (またおそらく他のシステム) では、 ETXTBSY が発生した場合、自動的に中断 (sleep) し再試行を行う。 Linux はそれをハードエラーとして取り扱い即座に復帰する。
伝統的に、関数 execlp() と execvp() は、上で説明したエラーと、これら 2 つの関数自身が返す ENOMEM と E2BIG 以外の全てのエラーを無視していたが、 今では、上で説明した以外のエラーが発生した場合でも、 返ってくるよう変更された。