退出返回值 - sh
来源:互联网 发布:淘宝运营推广的方式 编辑:程序博客网 时间:2024/04/30 07:14
写一段hello world:
1 // filename: main.c2 3 #include <stdio.h>4 int main(void)5 {6 printf("hello wolrd!\n");7 return(-1); 8 }
编译执行:gcc main.c && ./a.out
现在我们看看在当前shell中返回上一个执行过程的返回值是多少,是 “-1” 吗?
inuyasha@inuyasha-Aspire-4741:~/桌面$ gcc main.c && ./a.outhello world!inuyasha@inuyasha-Aspire-4741:~/桌面$ echo $?255
啊,结果为什么 "255"呢?调用一个程序, 程序退出-1, 得到结果不是“-1”吗?
以下引用自:http://www.laruence.com/2012/02/01/2503.html
这个问题简单的说, 是因为exit或者main函数中的return, 只能使用0~255之间的值. -1 的unsigned值就是255.
那么复杂点的说呢?
我们知道, 在Shell中, 运行一个命令, 一个程序, 都是fork一个子进程(然后exec)来执行的, 而这个程序的退出码, 被Shell(父进程), 通过wait来收集而后报告给我们的.
- pid_twait(int *statloc);
而对于wait来说, 历史上原因, 他将通过statloc返回一个16bit的interge(现在也有用32位表示的, 但是会兼容已有的设计). 这16bits的interge中, 高8位就是程序退出的值(exit, 或者return), 而低八位表示导致这个程序退出的信号(其中一位表示是否有Core文件产生), 如果程序是正常退出, 那么低八位为0[1].
所以, 如果我们返回-1, 并且因为我们是正常退出, 所以Shell通过wait收集到的子进程退出状态是:
- 11111111 00000000
而高八位作为unsigned, 就是255了.
另外, 补充一下, 在Linux的内建Shell命令中, 很多都会遵守一个退出状态码的约定, 具体的值对应的意思[2]:
0 0
- 退出返回值 - sh
- 获取shell退出返回值 -- sh
- 应用程序退出时的返回值
- android 返回键 退出
- “返回”退出提示
- android返回二次退出
- android 返回键退出
- 双击返回键退出
- 双击返回退出程序
- shell退出,返回小结
- 双击返回退出 android
- 双击返回键退出
- 双击返回退出
- Android返回不退出
- 双击返回,退出应用。
- 点击两次返回退出
- 点击返回退出
- 双击返回键退出
- Debian(Linux)中手动安装Adobe Flash Player
- 黑马程序员-OC中对象方法的声明与调用(多个参数)
- 游戏开发九宫格战斗架构解析详解
- oralce创建job
- 如何在泰国#组联系人列表中的联系人姓名分类?
- 退出返回值 - sh
- 自定义组合控件
- ehcache 使用及与Spring整合
- c++ 中 指针的指针** 与 指针的引用 *&
- 展开与收起效果(文章效果)
- mysql_query("set names gb2312")设置客户端字符集
- Windows8下Visual Studio 2003全文搜索未响应解决办法
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (
- 医院不会告诉你的秘密:如何预知宝宝性别!