当main()函数没有返回零时会发生什么

时间:2012-11-06 07:18:16

标签: c operating-system

请考虑以下代码:

#include <stdio.h>

int main()
{
    int x;
    printf ("\nEnter x: ");
    scanf ("%d", &x);

    return x;
}

Output:
$Enter x: -2

$echo $?
254

我的问题是:

操作系统通过执行进程P(上面的代码执行)知道main()的返回值是NON-ZERO。

在这种情况下操作系统是否会进行任何处理?

3 个答案:

答案 0 :(得分:4)

返回值实际上表示程序完成的状态。非零值表示程序已异常终止。其他程序可以使用该状态,因此返回实际状态始终是一种好习惯。

答案 1 :(得分:4)

必须明确“操作系统”对此的理解。

如果你从shell的角度来看(无论如何通常只是另一个用户空间程序,而不是内核本身的一部分),进程的退出值用于评估表达式的值并且很重要在进行shell编程时,因为它是在进程终止后进行的最自然的检查。

从内核的角度来看,进程的退出值在很大程度上被忽略了。无论退回的退出代码如何,内核都必须在进程后进行清理。

答案 2 :(得分:1)

通常,当程序执行“期望”时,我们返回0.如果它执行某些操作则不应该返回非零值,这取决于错误的类型(为此您可以参考errno手册)。现在这个返回值由程序运行的“shell”接收。可以使用“$?”访问此返回值在BASH。因此,它纯粹是为了用户对程序的可访问性(它正确运行,如果没有,那么错误是什么)。然后可以在shell脚本等中使用此返回值来决定是重新运行还是管理员想要执行的任何操作。 内核只是清理用户登陆程序。