fork()またはforkpty()が続いていると仮定しexeclp()ますexecvp()。基本的に、返されるかどうかを確認する必要がありexec?p()ます(失敗した場合にのみ返されます)。その場合は、失敗が発生したことを親プロセスに通知するだけです。これを行う 1 つの方法は、exit()ステータスを使用することです。親はwait()、子プロセスをリープするために使用することで、このステータスを取得できます。
#define EXEC_FAIL_MAGIC 177
void edit (const char *e) {
int status = 0;
pid_t p = fork();
switch (p) {
default: /* parent */
while (wait(&status) != p) {}
break;
case 0: /* child */
execlp(e, e, "foo.txt", (char *)0);
exit(EXEC_FAIL_MAGIC);
case -1: /* error */
fail("fork() failed");
}
if (!WIFEXITED(status)) fail("abnormal termination of editor");
if (WEXITSTATUS(status) == EXEC_FAIL_MAGIC) fail("execlp failed");
if (WEXITSTATUS(status) != EXIT_SUCCESS) fail("editor had failure");
}