This question was migrated from Unix & Linux Stack Exchange because it can be answered on Stack Overflow. Migrated四年前Learn more
这是unix v6代码:http://v6shell.org/history/if.c
doex(earg) {
...
execv(ncom, nargv, np);
return(1);
}

因此,如果execv成功执行,我们将无法到达下一行并返回1。相反,execv将返回(0?)然后退出函数。
但为什么呢?
除非你必须写这封信:
if ( execv(ncom, nargv, np) ) return (0);
return (1);

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

最佳答案

从您链接的exec手册页开始:
Exec用命名文件覆盖调用进程,然后
传输到文件核心映像的开头。
文件不能返回;调用核心映像
是迷路了。
就像在today's exec functions中一样,execv调用完全用新的进程替换调用进程。如果由于某种原因execv失败,控件将传递到下一行,函数将return 1。否则,子进程的退出代码将用作该进程的退出代码,并且不再执行来自该进程的其他代码。

关于c - execv为什么退出功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27773445/

10-11 09:32