为什么退出(42)?

时间:2016-09-07 09:39:54

标签: c

为什么我们在退出流程时使用42作为退出的参数?我想知道它是一些宏值(如1是EXIT_FAILURE宏的值)还是它有更深层含义?

if(pid == 0) {
    printf("something\n");
    exit(42);
}

很明显,如果我使用exit(1)或exit(42)并不重要,但为什么只有42?

3 个答案:

答案 0 :(得分:8)

除0之外的任何数字都可以。但42是Answer to the Ultimate Question of Life, the Universe, and Everything

在IT人员中非常受欢迎......

但道格拉斯亚当斯为什么选择42?

  

我坐在办公桌前,盯着花园,想着会做什么。一世   输入它。故事结束

答案 1 :(得分:2)

这样的魔术值可用于指示父进程的确切退出原因。您可能会像某种简约的IPC那样威胁它。当然,这两个过程必须就实际值及其含义达成一致,并且不要使用特殊的保留退出代码。

答案 2 :(得分:1)

  

很明显,如果我使用exit(1)或exit(42)

并不重要

实际上很重要。

启动退出流程的流程可以使用退出代码来了解它是如何完成的以及它失败的原因。

启动程序的过程可以在程序完成后立即检查环境变量$?的值,以确定它是否成功或失败的原因,如果它没有成功。

假设您的程序从远程站点下载文件并将其存储在本地目录中。它期望使用现有的本地目录,如果它不存在则不会尝试创建它。例如,当无法下载远程文件时,它可以退出代码37,因为远程站点返回404 Not Found,当代码62由于网络关闭而无法下载文件时(或发生超时)和本地目录不存在时的代码41

例如,调用程序的bash脚本可以在程序完成后立即检查环境变量$?的值。如果其值为37(未找到远程文件),则不得尝试重试,因为错误是永久性的。在退出代码62(网络问题)时,它可以等待几秒钟再试一次(错误条件是暂时的,它可能会在一段时间后消失)。在退出代码41(找不到本地目录)时,它可以创建本地目录,然后再次启动程序(不满足前提条件)。