最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

exit(-1)或者return(-1)shell得到的退出碼為什么是255

 更新時(shí)間:2015年10月14日 14:38:45   投稿:mrr  
exit(-1)或者return(-1)shell得到的退出碼為是255,大家知道為什么嗎?帶著這個(gè)疑問來腳本之家學(xué)習(xí)下吧,本篇文章告訴大家答案

下面我寫了一個(gè)hello world程序,一起看看吧:

// filename: main.c
 #include <stdio.h>
 int main(void)
 {
   printf("hello wolrd!\n");
   return(-);  
 }

編譯執(zhí)行:gcc main.c && ./a.out

現(xiàn)在我們看看在當(dāng)前shell中返回上一個(gè)執(zhí)行過程的返回值是多少,是 “-1” 嗎?

inuyasha@inuyasha-Aspire-4741:~/桌面$ gcc main.c && ./a.out

hello world!

inuyasha@inuyasha-Aspire-4741:~/桌面$ echo $?

255

啊,結(jié)果為什么 "255"呢?調(diào)用一個(gè)程序, 程序退出-1, 得到結(jié)果不是“-1”嗎?

以下引用自:http://www.laruence.com/2012/02/01/2503.html

這個(gè)問題簡(jiǎn)單的說, 是因?yàn)閑xit或者main函數(shù)中的return, 只能使用0~255之間的值. -1 的unsigned值就是255.

那么復(fù)雜點(diǎn)的說呢?

我們知道, 在Shell中, 運(yùn)行一個(gè)命令, 一個(gè)程序, 都是fork一個(gè)子進(jìn)程(然后exec)來執(zhí)行的, 而這個(gè)程序的退出碼, 被Shell(父進(jìn)程), 通過wait來收集而后報(bào)告給我們的.

pid_twait(int *statloc);

而對(duì)于wait來說, 歷史上原因, 他將通過statloc返回一個(gè)16bit的interge(現(xiàn)在也有用32位表示的, 但是會(huì)兼容已有的設(shè)計(jì)). 這16bits的interge中, 高8位就是程序退出的值(exit, 或者return), 而低八位表示導(dǎo)致這個(gè)程序退出的信號(hào)(其中一位表示是否有Core文件產(chǎn)生), 如果程序是正常退出, 那么低八位為0[1].

所以, 如果我們返回-1, 并且因?yàn)槲覀兪钦M顺? 所以Shell通過wait收集到的子進(jìn)程退出狀態(tài)是:

11111111 00000000

而高八位作為unsigned, 就是255了.

另外, 補(bǔ)充一下, 在Linux的內(nèi)建Shell命令中, 很多都會(huì)遵守一個(gè)退出狀態(tài)碼的約定, 具體的值對(duì)應(yīng)的意思[2]:

Exit Code Number Meaning Example Comments
1 Catchall for general errors let “var1 = 1/0″ Miscellaneous errors, such as ”divide by zero” and other impermissible operations
2 Misuse of shell builtins (according to Bash documentation) empty_function() {} Seldom seen, usually defaults to exit code 1
126 Command invoked cannot execute   Permission problem or command is not an executable
127 “command not found” illegal_command Possible problem with $PATH or a typo
128 Invalid argument to exit exit 3.14159 exit takes only integer args in the range 0 – 255 (see first footnote)
128+n Fatal error signal ”n” kill -9 $PPID of script $? returns 137 (128 + 9)
130 Script terminated by Control-C   Control-C is fatal error signal 2, (130 = 128 + 2, see above)
255* Exit status out of range exit -1 exit takes only integer args in the range 0 – 255

相關(guān)文章

  • 五個(gè)常用的Linux監(jiān)控腳本代碼

    五個(gè)常用的Linux監(jiān)控腳本代碼

    為大家提供五個(gè)常用linux監(jiān)控腳本(查看主機(jī)網(wǎng)卡流量、系統(tǒng)狀況監(jiān)控、監(jiān)控主機(jī)的磁盤空間,當(dāng)使用空間超過90%就通過發(fā)mail來發(fā)警告、監(jiān)控CPU和內(nèi)存的使用情況、全方位監(jiān)控主機(jī)),有需要的朋友不妨看看哦
    2013-02-02
  • 淺析Linux tar打包命令

    淺析Linux tar打包命令

    這篇文章主要介紹了Linux tar打包命令,本文給大家?guī)戆藗€(gè)范例,每個(gè)范例都給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • linux系統(tǒng)下hosts文件詳解及配置

    linux系統(tǒng)下hosts文件詳解及配置

    hosts文件是Linux系統(tǒng)上一個(gè)負(fù)責(zé)ip地址與域名快速解析的文件,以ascii格式保存在/etc/目錄下。這篇文章主要介紹了linux系統(tǒng)下hosts文件詳解及配置的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Shell之function函數(shù)的定義及調(diào)用示例

    Shell之function函數(shù)的定義及調(diào)用示例

    本文主要介紹了Shell之function函數(shù)的定義及調(diào)用示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • bash shell命令行選項(xiàng)與修傳入?yún)?shù)處理

    bash shell命令行選項(xiàng)與修傳入?yún)?shù)處理

    本文介紹了bash shell命令行參數(shù)與命令行選項(xiàng)的操作方法,有關(guān)shell 命令行參數(shù)的實(shí)例教程,有需要的朋友參考下。
    2014-04-04
  • Shell 批量進(jìn)程判斷是否存在

    Shell 批量進(jìn)程判斷是否存在

    本文主要介紹了Shell 批量進(jìn)程判斷是否存在,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Shell腳本實(shí)現(xiàn)判斷IP地址是否在一個(gè)ip段內(nèi)代碼分享

    Shell腳本實(shí)現(xiàn)判斷IP地址是否在一個(gè)ip段內(nèi)代碼分享

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)判斷IP地址是否在一個(gè)ip段內(nèi)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • Shell腳本檢查IP格式及mysql操作實(shí)例

    Shell腳本檢查IP格式及mysql操作實(shí)例

    這篇文章主要介紹了Shell腳本檢查IP格式及mysql操作實(shí)例,本文直接給出腳本代碼,需要的朋友可以參考下
    2015-05-05
  • linux下通過命令行獲取gmail的新郵件

    linux下通過命令行獲取gmail的新郵件

    在這篇文章中,我將為你展示 Linux 命令行的另一個(gè)漂亮干練的使用案例:訪問 Google 的 Gmail 服務(wù),有需要的小伙伴可以參考下。
    2015-05-05
  • Shell腳本批量添加擴(kuò)展名的兩種方法分享

    Shell腳本批量添加擴(kuò)展名的兩種方法分享

    這篇文章主要介紹了Shell腳本批量添加擴(kuò)展名的兩種方法分享,本文講解了用rename命令修改后綴名、用for、sed和mv修改后綴名、用find和xargs添加后綴名等方法,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

呈贡县| 娱乐| 原平市| 吴川市| 海晏县| 武平县| 陵川县| 闻喜县| 工布江达县| 崇义县| 正镶白旗| 长阳| 岳池县| 安平县| 德保县| 通渭县| 沂源县| 乐平市| 开江县| 麻栗坡县| 万载县| 杂多县| 滨海县| 平潭县| 榕江县| 搜索| 镇江市| 灵璧县| 潢川县| 青阳县| 沙河市| 庄浪县| 日土县| 江达县| 泸定县| 天门市| 苏尼特左旗| 邮箱| 东山县| 麦盖提县| 商城县|