【发布时间】:2015-05-12 05:53:09
【问题描述】:
我从一本名为“高级 Linux 编程”的书中获得了以下功能。
int spawn (char* program, char** arg_list)
{
pid_t child_pid;
/* Duplicate this process. */
child_pid = fork ();
if (child_pid != 0)
/* This is the parent process. */
return child_pid;
else {
/* Now execute PROGRAM, searching for it in the path. */
execvp (program, arg_list);
/* The execvp function returns only if an error occurs. */
fprintf (stderr, “an error occurred in execvp\n”);
abort ();
}
}
但我很困惑,在ls 成功执行的情况下,不会打印错误,但如果失败,它会打印错误,并将其放在它后面的行中。
我的问题
fprintf (stderr, “an error occurred in execvp\n”);这一行在execvp()函数之后,预计会在execvp()执行完毕后执行,但事实并非如此,只有在execvp()遇到错误时才会执行。似乎函数spawn() 在成功执行execvp() 后立即结束。我说的对吗?
【问题讨论】: