在Linux中,如果进程的退出状态为0,则认为该进程已正确完成。
我看到分割错误经常导致退出状态为11,尽管我不知道这只是我工作的地方的惯例(像这样失败的应用程序都是内部的)还是一种标准。
Linux中进程有标准的退出码吗?
在Linux中,如果进程的退出状态为0,则认为该进程已正确完成。
我看到分割错误经常导致退出状态为11,尽管我不知道这只是我工作的地方的惯例(像这样失败的应用程序都是内部的)还是一种标准。
Linux中进程有标准的退出码吗?
当前回答
头文件sysexits.h有一个标准退出码列表。它似乎至少可以追溯到1993年,一些大型项目,如Postfix使用它,所以我认为这是一种方式。
从OpenBSD手册页:
根据style(9),在结束程序时,用任意值调用exit(3)来指示失败条件并不是一个好的实践。相反,应该使用来自sysexits的预定义退出码,以便进程的调用者可以获得关于故障类的粗略估计,而无需查找源代码。
其他回答
粗略地说,0代表成功,非0代表失败,1代表一般失败,大于1代表特定失败。除了false和test这两个简单的例外,我还发现了其他一些例外。
更现实地说,0意味着成功或可能失败,1意味着一般的失败或可能成功,2意味着一般的失败,如果1和0都用来表示成功,但也可能是成功。
如果比较的文件相同,diff命令给出0,如果不同,则给出1,如果二进制文件不同,则给出2。2也意味着失败。less命令为失败提供1,除非您未能提供参数,在这种情况下,尽管失败,它仍退出0。
more命令和spell命令给出1表示失败,除非失败是由于权限被拒绝、文件不存在或试图读取目录造成的。在任何这些情况下,尽管失败,它们仍然退出0。
然后expr命令给出1表示成功,除非输出是空字符串或零,在这种情况下,0表示成功。2和3是失败。
还有一些情况下,成功或失败是模棱两可的。当grep无法找到一个模式时,它退出1,但它退出2是真正的失败(比如拒绝许可)。Klist在找不到票时也会退出1,尽管这并不比grep找不到模式或ls一个空目录更失败。
因此,不幸的是,Unix的强大功能似乎并没有强制执行任何逻辑规则集,即使是在非常常用的可执行文件上。
当Linux返回0时,意味着成功。其他都意味着失败。每个程序都有自己的退出码,所以要把它们都列出来实在是太长了……!
关于11错误代码,它确实是分段错误编号,主要意味着程序访问了一个没有分配的内存位置。
'1':笼统错误
'2':误用shell内置程序(根据Bash文档)
“126”:调用的命令无法执行
'127': "命令未找到"
'128':无效的退出参数
'128+n':致命错误信号"n"
'130':以Ctrl + C结束的脚本
255:超出范围的退出状态
这是给巴斯的。但是,对于其他应用程序,有不同的退出代码。
头文件sysexits.h有一个标准退出码列表。它似乎至少可以追溯到1993年,一些大型项目,如Postfix使用它,所以我认为这是一种方式。
从OpenBSD手册页:
根据style(9),在结束程序时,用任意值调用exit(3)来指示失败条件并不是一个好的实践。相反,应该使用来自sysexits的预定义退出码,以便进程的调用者可以获得关于故障类的粗略估计,而无需查找源代码。
除了0表示成功之外,没有标准的退出码。非零也不一定意味着失败。
头文件stdlib.h确实将EXIT_FAILURE定义为1,将EXIT_SUCCESS定义为0,但仅此而已。
段错误上的11很有趣,因为11是内核在发生段错误时用来终止进程的信号数。在内核或shell中,可能存在某种机制将其转换为退出代码。