程序退出状态约定

时间:2013-08-15 08:00:53

标签: linux windows exit-code errno getlasterror

Windows和GNU / Linux中的应用程序的常规返回值分别是什么。 0表示成功。但应该在用户请求的中止使用什么。当我在Windows上中止时,它返回3,但如果它不是ERROR_PATH_NOT_FOUND,则该值不在系统错误代码列表中。 GNU binutils使用1.从用户角度来看,返回GetLastError或errno会很好,因为它们已被记录,但这些似乎只包含较低级别的状态代码。我正在寻找一个代表“应用程序终止失败”的值

我更聪明的原因是我想要

exit(errcode)

来自信号处理程序,该信号处理程序在打印有关其发生位置的消息后捕获一些访问冲突/ SIGSEGV(即编程错误)。然后,错误代码应该是用户输入错误的理想选择。

2 个答案:

答案 0 :(得分:3)

这可能会有所帮助,http://tldp.org/LDP/abs/html/exitcodes.html这些是标准的退出代码。我认为其余的都是程序依赖的。基本上你需要验证你正在寻找的特定软件的文档。正如@devnull所说,任何非零的退出代码都意味着终止不成功

答案 1 :(得分:1)

这只是关于退出代码的几个约定。让我们看看一些手册的内容:

GNU C Library参考手册

  
      
  1. 某些程序应返回哪些状态值的约定。   最常见的约定是0表示成功,1表示失败   ...

  2.   
  3. 一般惯例为特殊目的保留状态值128及以上

  4.   
  5. 某些非POSIX系统对退出状态使用不同的约定   值
  6.   
  7. 为了获得更好的便携性,您可以使用宏 EXIT_SUCCESS EXIT_FAILURE   对于成功和失败的传统状态值。
  8.   

ISO / IEC 9899:2011(C11标准)

  

如果状态值为 EXIT_SUCCESS ,则会返回状态成功终止的实现定义形式。如果状态值为 EXIT_FAILURE ,则会返回状态不成功终止的实现定义形式。否则返回的状态是实现定义的。

这意味着如果你想要(并且对于大多数情况来说足够)只是表明成功或失败,你肯定应该使用 EXIT_SUCCESS EXIT_FAILURE 。如果您想指出其他错误,您应该重新发明自己的退出状态。例如:

#define HEX_FILE_CREATE 2
#define HEX_FILE_CREATE 3
...

关于您应该返回的内容和方式还有其他提示:

  
      
  1. 警告:请勿尝试将错误数用作退出状态。这实际上不是   很有用;父进程通常不关心发生了多少错误。更差   除此之外,它不起作用,因为状态值被截断为8位。因此,如果   该程序试图报告256个错误,父母将收到0个错误的报告 - 那个   是,成功
  2.   
  3. 出于同样的原因,使用errno的值作为退出状态 - 这些不起作用   可以超过255
  4.   

<强>结论:

  1. 为了成功,请始终使用 EXIT_SUCCESS
  2. 您的失败退出状态应为1到127之间
  3. 请勿使用 errno 错误代码作为退出状态