如果我的main函数调用foo(),它调用foo2(),它只有一个语句:
exit(1);
我的main函数也会以1退出吗?
编辑:如果我在main()中有一个fork,并在我的孩子中调用foo,那么
wait(&status);
WEXITSTATUS会是什么?
答案 0 :(得分:4)
从技术上讲,没有。程序终止于点exit()被调用。在功能上,
之间没有外部差异int main() {
return 1;
}
和
int foo(2) {
exit 1;
}
外部呼叫应用程序只会获得1的退出状态,并且无法确定它是来自main中的返回还是来自foo的退出。
答案 1 :(得分:1)
exit
本身不会返回,但您的程序的退出状态为1
,如果这就是您所要求的。
答案 2 :(得分:0)
有效的是。 exit
使用给定的状态代码退出整个程序。如果从main
返回值,则C标准表示结果就好像您使用相同的值调用了exit
。因此,如果您自己致电exit
,main
永远不会真正返回,但结果是一样的。
答案 3 :(得分:0)
如果你fork()
,那么子进程将以状态1终止,状态1将被分配给父进程的变量status
(启动main()的那个)。
但请注意fork()
如何工作,因为在两个进程中都可能调用foo()函数,在这种情况下,主进程也会以退出状态1终止。如果必须检查fork()返回的值(进程id / pid)。 PID = -1有错误,PID = 0,你在子进程中;否则,你在父进程中。
参考文献:http://linux.die.net/man/2/wait http://linux.die.net/man/3/exit