在C中使用exit()

时间:2014-03-12 03:54:49

标签: c linux

如果我的main函数调用foo(),它调用foo2(),它只有一个语句:

  

exit(1);

我的main函数也会以1退出吗?

编辑:如果我在main()中有一个fork,并在我的孩子中调用foo,那么

wait(&status);

WEXITSTATUS会是什么?

4 个答案:

答案 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。因此,如果您自己致电exitmain永远不会真正返回,但结果是一样的。

答案 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