在Linux中,如果进程的退出状态为0,则认为该进程已正确完成。
我看到分割错误经常导致退出状态为11,尽管我不知道这只是我工作的地方的惯例(像这样失败的应用程序都是内部的)还是一种标准。
Linux中进程有标准的退出码吗?
在Linux中,如果进程的退出状态为0,则认为该进程已正确完成。
我看到分割错误经常导致退出状态为11,尽管我不知道这只是我工作的地方的惯例(像这样失败的应用程序都是内部的)还是一种标准。
Linux中进程有标准的退出码吗?
当前回答
第1部分:高级Bash脚本编写指南
像往常一样,高级Bash脚本编写指南有很多信息: (这个链接在另一个答案中,但指向一个非规范的URL。)
1:捕捉一般错误 2:误用shell内置程序(根据Bash文档) 126:调用的命令无法执行 127: "命令未找到" 128:退出的无效参数 128+n:致命错误信号“n” 255:退出状态超出范围(退出只接受0 - 255范围内的整数参数)
第2部分:sysexits.h
ABSG引用sysexits.h。
在Linux上:
$ find /usr -name sysexits.h
/usr/include/sysexits.h
$ cat /usr/include/sysexits.h
/*
* Copyright (c) 1987, 1993
* The Regents of the University of California. All rights reserved.
(A whole bunch of text left out.)
#define EX_OK 0 /* successful termination */
#define EX__BASE 64 /* base value for error messages */
#define EX_USAGE 64 /* command line usage error */
#define EX_DATAERR 65 /* data format error */
#define EX_NOINPUT 66 /* cannot open input */
#define EX_NOUSER 67 /* addressee unknown */
#define EX_NOHOST 68 /* host name unknown */
#define EX_UNAVAILABLE 69 /* service unavailable */
#define EX_SOFTWARE 70 /* internal software error */
#define EX_OSERR 71 /* system error (e.g., can't fork) */
#define EX_OSFILE 72 /* critical OS file missing */
#define EX_CANTCREAT 73 /* can't create (user) output file */
#define EX_IOERR 74 /* input/output error */
#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
#define EX_PROTOCOL 76 /* remote error in protocol */
#define EX_NOPERM 77 /* permission denied */
#define EX_CONFIG 78 /* configuration error */
#define EX__MAX 78 /* maximum listed value */
其他回答
当Linux返回0时,意味着成功。其他都意味着失败。每个程序都有自己的退出码,所以要把它们都列出来实在是太长了……!
关于11错误代码,它确实是分段错误编号,主要意味着程序访问了一个没有分配的内存位置。
有些是惯例,但其他一些保留的是POSIX标准的一部分。
126—找到要执行的文件,但它不是可执行实用程序。 127—没有找到要执行的实用程序。 >128—命令被信号中断。
参见man 1p退出的基本原理部分。
程序返回一个16位的退出码。如果程序被一个信号杀死,那么高阶字节包含所使用的信号,否则低阶字节是程序员返回的退出状态。
退出码是如何分配给状态变量$的?然后到壳层。Bash保留状态的低7位,然后使用128 +(信号nr)表示信号。
程序的唯一“标准”约定是成功为0,错误为非0。使用的另一个约定是在错误时返回errno。
'1':笼统错误
'2':误用shell内置程序(根据Bash文档)
“126”:调用的命令无法执行
'127': "命令未找到"
'128':无效的退出参数
'128+n':致命错误信号"n"
'130':以Ctrl + C结束的脚本
255:超出范围的退出状态
这是给巴斯的。但是,对于其他应用程序,有不同的退出代码。
头文件sysexits.h有一个标准退出码列表。它似乎至少可以追溯到1993年,一些大型项目,如Postfix使用它,所以我认为这是一种方式。
从OpenBSD手册页:
根据style(9),在结束程序时,用任意值调用exit(3)来指示失败条件并不是一个好的实践。相反,应该使用来自sysexits的预定义退出码,以便进程的调用者可以获得关于故障类的粗略估计,而无需查找源代码。