2012-07-30 73 views
0

据我所知,exit(1)指示的错误,例如:退出(0)的目的是什么?

if (something went wrong) 

    exit(EXIT_FAILURE); 

但是,什么是使用exit(EXIT_SUCCESS);的目的是什么?

当处理进程可能吗?例如为fork()

感谢

+4

如果你发现你的程序已经完成了所有需要做的事情,并且不在'main()'中,那么你可以调用'exit(0)'。 – 2012-07-30 18:00:08

+0

@DanielFischer:那么你的意思是说,这是让我的代码返回到它的调用函数,而不使用'return'的方法吗? – ron 2012-07-30 18:07:08

+1

这是一种几乎立即结束程序执行的方式(某些正常关机例程可能会在预定时间运行)与指定的退出代码。如果通过“调用函数”来表示shell或类似的话,那么是的;如果你的意思是在同一个程序中有一些功能,那么不需要。 – 2012-07-30 18:15:30

回答

6

这给调用程序(通常是指令壳)的方式,以检查是否在程序正常或不终止该系统的一部分。

编辑 - 启动 -

顺便说一句,可以通过使用$? shell变量来查询一个交互式命令的退出代码。例如,这个失败的ls命令产生值为2的退出代码。

$ ls -3 
ls: invalid option -- '3' 
Try `ls --help' for more information. 
$ echo $? 
2 

编辑 - 结束 -

试想一个批处理文件(或shell脚本),调用了一系列的方案,并根据每次运行的结果可能会选择一些动作或其他。这个动作可能包含一个简单的消息给用户,或者调用其他一些程序或一组程序。

这是程序返回其运行状态的一种方式。

另外,请注意,表示没有问题,任何非零值指示的问题。

程序通常会使用不同的非零值传递更多信息(除了非正常终止之外)。因此,非零出口值作为更具体的错误代码,可以识别特定的问题。当然,这取决于代码的含义是可用的(通常是/文档有望在)

例如,ls man page在底部此位的信息:

退出状态为0,如果OK ,如果小问题1,如果严重麻烦2。

对于Unix/Linux手册页,请查看标题为EXIT STATUS的部分以获取此信息。

+0

0确实表示成功,但非零值可能表示问题,也可能不表示问题。根据1999 C 7.20.4.3 5,除0,EXIT_SUCCESS或EXIT_FAILURE之外的任何值的含义都是实现定义的。例如,一个实现可以使用状态的低位来表示成功或失败,高位表示传递附加信息,例如处理了多少小部件。 – 2012-07-30 18:28:09

+0

@EricPostpischil谢谢..这是有用的信息和有益的知识。 – Levon 2012-07-30 20:06:37

+0

它也允许人确定程序是否正常终止。只是说 – 2012-07-30 21:29:25

1

您只能通过调用return函数从主函数中退出程序。要从其他地方退出程序,可以调用exit(EXIT_SUCCESS)。例如,当用户点击退出按钮时。

+0

好吧,你也可以在'main'中使用'exit()'当然是 – pb2q 2012-07-30 18:01:16

+0

!也许我不清楚 – 2012-07-30 18:03:28

1

这是一个系统调用。总是有系统调用好信息,如果您检查手册页:

http://linux.die.net/man/3/exit

在Linux中,你可以简单地输入man exit到终端,该信息将出现。

1

“正常”退出程序有两种方式:从main()返回,或致电exit()。正常情况下,exit()被用来表示失败的信号。但是,如果您不在main()中,您仍然必须以某种方式退出。 exit(0)通常用于在不在main()时终止进程。

main()实际上并不是操作系统的特殊功能,只是针对运行时环境。实际上被加载的'函数'通常被定义为_start()(这是由链接器处理的,超出了本答案的范围),用汇编写成,它简单地准备环境并调用main()。从main()返回后,它还会调用exit(),返回值为main()