1)shell得到的shell 退出码码为什么是255

帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:6&分页:企鹅发信人: wxstorm (企鹅), 信区: LinuxDev
标&&题: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 10:44:38 2012), 站内 && 如果是程序crash了,比如空指针引用,段错误之类的,进程的退出码是固定的么?怎么知道进程是正常退出的还是crash的?
现在我看到是139.。
有一天,小蜗牛问妈妈:为什么我们从生下来,就要背负这个又重又硬的壳啊?
妈妈:因为我们的身体没有骨骼的支撑,只能爬,爬得又慢,所以需要这个壳的保护啊!
小蜗牛:毛毛虫姐姐没有骨头,也爬不快,为什么她不用背这个又重又硬的壳呢?
妈妈:因为毛毛虫姐姐能变成蝴蝶,天空会保护她啊!
小蜗牛:可是蚯蚓哥哥也没有骨头爬不快,也不会变成蝴蝶,为什么他不背负这个又重又硬的
妈妈:因为蚯蚓哥哥会钻土,大地会保护他啊! &&&& ※ 修改:·wxstorm 于 Nov 27 10:50:12 2012 修改本文·[FROM: 219.142.213.*]
※ 来源:·水木社区 newsmth.net·[FROM: 219.142.213.*]
tucano发信人: tucano (tucano), 信区: LinuxDev
标&&题: Re: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 11:13:41 2012), 站内 && 用wait或waitpid回收子进程,可判断出是正常结束的还是因为段错误引发的信号结束的。&&&& 【 在 wxstorm 的大作中提到: 】
: 如果是程序crash了,比如空指针引用,段错误之类的,进程的退出码是固定的么?怎么知道进程是正常退出的还是crash的?
: 现在我看到是139.。
&& -- && ※ 来源:·水木社区 ·[FROM: 125.34.50.*]
企鹅发信人: wxstorm (企鹅), 信区: LinuxDev
标&&题: Re: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 11:20:19 2012), 站内 && 在shell脚本里能判断么?
【 在 tucano (tucano) 的大作中提到: 】
: 用wait或waitpid回收子进程,可判断出是正常结束的还是因为段错误引发的信号结束的。&& &&&& --
有一天,小蜗牛问妈妈:为什么我们从生下来,就要背负这个又重又硬的壳啊?
妈妈:因为我们的身体没有骨骼的支撑,只能爬,爬得又慢,所以需要这个壳的保护啊!
小蜗牛:毛毛虫姐姐没有骨头,也爬不快,为什么她不用背这个又重又硬的壳呢?
妈妈:因为毛毛虫姐姐能变成蝴蝶,天空会保护她啊!
小蜗牛:可是蚯蚓哥哥也没有骨头爬不快,也不会变成蝴蝶,为什么他不背负这个又重又硬的
妈妈:因为蚯蚓哥哥会钻土,大地会保护他啊! &&&& ※ 来源:·水木社区 newsmth.net·[FROM: 219.142.213.*]
tucano发信人: tucano (tucano), 信区: LinuxDev
标&&题: Re: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 12:23:18 2012), 站内 && 你指的是特殊变量$? 显示上一命令返回值吧
【 在 wxstorm 的大作中提到: 】
: 在shell脚本里能判断么?
:&& && -- && ※ 来源:·水木社区 ·[FROM: 125.34.50.*]
cwc发信人: cwc (cwc), 信区: LinuxDev
标&&题: Re: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 12:37:58 2012), 站内 && 换py写脚本
【 在 wxstorm (企鹅) 的大作中提到: 】
: 在shell脚本里能判断么?
shall we talk &&&& ※ 来源:·水木社区 newsmth.net·[FROM: 60.194.14.*]
劣币驱逐良币 | 少灌水发信人: vonNeumann (Neumann J\'anos Lajos), 信区: LinuxDev
标&&题: Re: 请教linux下进程的退出码
发信站: 水木社区 (Tue Nov 27 13:32:48 2012), 站内 && Shell 里面被信号杀死的进程表现为 $? & 128
减去 128 得到对应的信号,可以用 kill -l 直接看信号名字 && /tmp % kill -l 11
/tmp % kill -l 139
/tmp % echo $((139-128))
11 &&&& ps. 按惯例程序主动退出的只用 [0,127] 以内的返回值。如果非要有程序 exit(139) 也是可以的,这时候从 shell 里面就区分不开了.. && 【 在 wxstorm (企鹅) 的大作中提到: 】
: 在shell脚本里能判断么?
&&&& -- && GFDSA&&HJKLM&&TREWQ&&YUIOP&&NBVCX
王土大木工&&目日口田山&&禾白月人金&&言立水火之&&已子女又纟
一地在要工&&上是中国同&&和的有人我&&主产不为这&&民了发以经 &&&& ※ 修改:·vonNeumann 于 Nov 27 13:40:59 2012 修改本文·[FROM: 211.99.222.*]
※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]
文章数:6&分页:
抽奖到手软!将狂欢进行到底!exitexit-1)或者return(-1)shell得到的退出码是255的原因是什么? _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网
您的位置: >
> 阅读资讯:exitexit-1)或者return(-1)shell得到的退出码是255的原因是什么?
exitexit-1)或者return(-1)shell得到的退出码是255的原因是什么?
exitexit-1)或者return(-1)shell得到的退出码是255的原因是什么?
下面我写了一个hello world程序,一起看看吧:
// filename: main.c
#include &stdio.h&
int main(void)
printf(&hello wolrd!\n&);
return(-);
编译执行:gcc main.c && ./a.out
现在我们看看在当前shell中返回上一个执行过程的返回值是多少,是 &-1& 吗?
:~/桌面$ gcc main.c && ./a.out
hello world!
:~/桌面$ echo $?
啊,结果为什么 &255&呢?调用一个程序, 程序退出-1, 得到结果不是&-1&吗?
以下引用自://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收集到的子进程退出状态是:
而高八位作为unsigned, 就是255了.
另外, 补充一下, 在Linux的内建Shell命令中, 很多都会遵守一个退出状态码的约定, 具体的值对应的意思[2]:
Exit Code Number
Catchall for general errors
let &var1 = 1/0&P
Miscellaneous errors, such as&divide by zero&and other impermissible operations
Misuse of shell builtins (according to Bash documentation)
empty_function() {}
Seldom seen, usually defaults to exit code1
Command invoked cannot execute
Permission problem or command is not an executable
&command not found&
illegal_command
Possible problem with$PATHor a typo
Invalid argument toexit
exit 3.14159
exittakes only integer args in the range0 & 255(see first footnote)
Fatal error signal&n&
kill -9$PPIDof script
$?returns137(128 + 9)
Script terminated by Control-C
Control-C is fatal error signal2, (130 = 128 + 2, see above)
Exit status out of range
exittakes only integer args in the range0 & 255
本文地址:
相关文章列表温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
The C standard specifies two constants, EXIT_SUCCESS and EXIT_FAILURE, that may be passed to exit() to indicatesuccessful or unsuccessful termination, respectively.&以下摘自/usr/include/stdlib.hC代码 &#define&EXIT_FAILURE&&&&1&&&&&&&/*&Failing&exit&status.&&*/&&#define&EXIT_SUCCESS&&&&0&&&&&&&/*&Successful&exit&status.&&*/&&&BSD试图对退出码标准化。man 3 exit 写道BSD has attempted to st see the file &sysexits.h&.&&以下摘自/usr/include/sysexits.hC代码 &#define&EX_OK&&&&&&&&&&&0&&&&&&&/*&successful&termination&*/&&&&#define&EX__BASE&&&&&&&&64&&&&&&/*&base&value&for&error&messages&*/&&&&#define&EX_USAGE&&&&&&&&64&&&&&&/*&command&line&usage&error&*/&&#define&EX_DATAERR&&&&&&65&&&&&&/*&data&format&error&*/&&#define&EX_NOINPUT&&&&&&66&&&&&&/*&cannot&open&input&*/&&#define&EX_NOUSER&&&&&&&67&&&&&&/*&addressee&unknown&*/&&#define&EX_NOHOST&&&&&&&68&&&&&&/*&host&name&unknown&*/&&#define&EX_UNAVAILABLE&&69&&&&&&/*&service&unavailable&*/&&#define&EX_SOFTWARE&&&&&70&&&&&&/*&internal&software&error&*/&&#define&EX_OSERR&&&&&&&&71&&&&&&/*&system&error&(e.g.,&can't&fork)&*/&&#define&EX_OSFILE&&&&&&&72&&&&&&/*&critical&OS&file&missing&*/&&#define&EX_CANTCREAT&&&&73&&&&&&/*&can't&create&(user)&output&file&*/&&#define&EX_IOERR&&&&&&&&74&&&&&&/*&input/output&error&*/&&#define&EX_TEMPFAIL&&&&&75&&&&&&/*&temp&&user&is&invited&to&retry&*/&&#define&EX_PROTOCOL&&&&&76&&&&&&/*&remote&error&in&protocol&*/&&#define&EX_NOPERM&&&&&&&77&&&&&&/*&permission&denied&*/&&#define&EX_CONFIG&&&&&&&78&&&&&&/*&configuration&error&*/&&&&#define&EX__MAX&78&&&&&&/*&maximum&listed&value&*/&&&使用示例示例一 退出当前shell[root@new55 ~]#&[root@new55 ~]#&exitlogout&示例二 在脚本中,进入脚本所在目录,否则退出Bash代码 &cd&$(dirname&$0)&||&exit&1&&&示例三 在脚本中,判断参数数量,不匹配就打印使用方式,退出Bash代码 &if&[&"$#"&-ne&"2"&];&then&&&&&&echo&"usage:&$0&&area&&&hours&"&&&&&&exit&2&&fi&&&示例四 在脚本中,退出时删除临时文件Bash代码 &trap&"rm&-f&&echo&Bye."&EXIT&&&示例五 检查上一命令的退出码Bash代码 &./mycommand.sh&&EXCODE=$?&&if&[&"$EXCODE"&==&"0"&];&then&&&&&&echo&"O.K"&&fi &
阅读(44752)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Linux命令exit - 退出当前shell',
blogAbstract:'用途说明exit命令用于退出当前shell,在shell脚本中可以终止当前脚本执行。&常用参数',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}srjay111 的BLOG
用户名:srjay111
文章数:49
访问量:31953
注册日期:
阅读量:5863
阅读量:12276
阅读量:361863
阅读量:1057513
[匿名]51cto游客:
[匿名]51cto游客:
51CTO推荐博文
exit 命令被用来结束脚本,就像C 语言一样.他也会返回一个值来传给父进程,父进程会判断是否 可用. &每个命令都会返回一个exit 状态(有时候也叫 return 状态). 成功返回 0, 如果返回一个非 0 值,通 常情况下都会被认为是一个错误码.一个编写良好的UNIX命令,程序,和工具都会返回一个0 作为 退出码来表示成功,虽然偶尔也会有例外. &同样的,脚本中的函数和脚本本身都会返回退出状态.在脚本或者是脚本函数中执行的最后的命 令会决定退出状态.在脚本中,exit nnn 命令将会把 nnn 退出码传递给 shell(nnn必须是 10进制数 0-255).& 当一个脚本以不带参数exit 来结束时,脚本的退出状态就由脚本中最后执行命令来决定.#!/bin/bash &COMMAND_1 &. . . & # 将以最后的命令来决定退出状态 COMMAND_LAST & &exit $? $? 读取最后执行命令的退出码.函数返回后,$? 给出函数最后执行的那条命令的退出码. 这种给返回值的方法是Bash的方法.对于脚本来说也一样.总之,一般情况下,0 为成功,非0为失败..Example:###############Start Script#########!/bin/bashpwdhostnameifconfigaaaexit 12df -hwhoamiuname -rexit 22###############End Script########&&&& [root@rong2 test]# echo $?&& 12因为没有aaa这个命令,所以结束脚本。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 shell 退出码 的文章

 

随机推荐