导航

读书笔记,echo$?得到进程结束状态

Posted on 2012-01-02 18:45  网名还没想好  阅读(530)  评论(0编辑  收藏  举报

$?是Linucx shell中的一个内置变量,其中保存最近一次运行的进程的返回值。这个返回值有以下三种情况。

1,程序的main函数运行结束,$?保存main函数的返回值。

2,程序运行中调用exit函数结束执行,$?中保存exit的参数。

3,程序异常退出,$?保存异常的出错号。

#include<stdio.h>

int main()

{

ruturn 5;

}

运行该代码后,执行echo ¥?,显示:5

$?内置变量中的1表示shell运行程序出错,在shell默认的路径找不到指定的程序。所以在编写代码时如果没有出错,则不要用main函数return 1 或者exit(0)这样的写法,以免引起不必要的混乱。

再看另一段代码

#inclide<stdio.h>

int main()

{

printf("hello world\n");//没有return 语句

}

这时echo $?显示12,即printf函数的返回值,因此有可能echo$?取的就是eax寄存器的值,不过如果是这样,那假设本电脑是多处理器的,运行一个多线程程序,多个线程同时返回,那这时echo $?的返回值又是什么呢?唉,暂时不得而知。。。。

(文中大部分内容出自《linux c 程序设计大全》吴岳)