4

请考虑以下代码:

#include <stdio.h>

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

    return x;
}

Output:
$Enter x: -2

$echo $?
254

我的问题是:

操作系统通过执行进程 P(上面正在执行的代码)知道 main() 的返回值是非零的。

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

4

3 回答 3

4

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

于 2012-11-06T07:20:56.317 回答
4

这里的“操作系统”必须清楚你所理解的。

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

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

于 2012-11-06T07:27:55.767 回答
1

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

于 2012-11-06T23:07:08.920 回答