为什么 execv 退出函数?

Why does execv exit a function?

这是 unix v6 代码:http://v6shell.org/history/if.c

doex(earg) {
...
execv(ncom, nargv, np);
return(1);
}

因此,如果 execv 成功执行,我们将不会到达下一行 return 1。相反,execv 将 return 某些内容(0?)并退出函数 doex。 但是为什么呢?

除非你必须这样写:

if ( execv(ncom, nargv, np) ) return (0);
return (1);

unix v6 exec - 手册页:http://man.cat-v.org/unix-6th/2/exec

从您链接的 exec 手册页开始:

Exec overlays the calling process with the named file, then transfers to the beginning of the core image of the file. There can be no return from the file; the calling core image is lost.

就像在 today's exec functions 中一样,execv 调用完全用一个新进程替换了调用进程。如果 execv 由于某种原因失败,控制将传递到下一行并且函数将 return 1。否则,子进程的退出代码将用作该进程的退出代码,并且不再执行该进程的代码。