exec(2) は、execl(2)、execv(2)、execle(2)、execve(2)、execvp(2) を含む関数ファミリ名です。これらの関数はいずれも、呼び出しプロセスを新しいプロセスで置き換えますが、引数のまとめ方と表し方が異なります。たとえば、execl(2) は次のように使用できます。
execl("/usr/bin/prog2", "prog2", progarg1, progarg2, (char (*)0)); |
exec1(2) 引数リストは、次のとおりです。
/usr/bin/prog2 |
新しいプロセスファイルのパス名 |
prog2 |
新しいプロセスが argv[0]に取り込む名前 |
progarg1 progarg2 |
prog2 への char (*) 型の引数 |
(char (*)0) |
引数の終わりを示す NULL の char ポインタ |
exec(2) が正常に実行されるといかなる時でも、復帰はありません。新しいプロセスが exec(2) を呼び出したプロセスを上書きしてしまうためです。新しいプロセスは、古いプロセスのプロセス ID やその他の属性を引き継ぎます。exec(2) の呼び出しが失敗すると、制御は呼び出しプログラムに戻され、戻り値 -1 が返されます。errno をチェックすれば、失敗した理由がわかります。