關於return和exit

    關於return和exitshell

  在子進程退出的時候有兩種方式,exit和exec族函數,不能使用return,爲何不能用return呢,exit改爲return 會出現父子進程又各自重複開始進行。函數

  一、exit函數和return函數的主要區別是:spa

 

  1)exit用於在程序運行的過程當中隨時結束程序,其參數是返回給OS的。也能夠這麼講:exit函數是退出應用程序,並將應用程序的一個狀態返回給OS,這個狀態標識了應用程序的一些運行信息。操作系統

 

  main函數結束時也會隱式地調用exit函數,exit函數運行時首先會執行由atexit()函數登記的函數,而後會作一些自身的清理工做,同時刷新全部輸出流、關閉全部打開的流而且關閉經過標準I/O函數tmpfile()建立的臨時文件。.net

 

  exit是系統調用級別的,它表示了一個進程的結束,它將刪除進程使用的內存空間,同時把錯誤信息返回父進程。一般狀況:exit(0)表示程序正常, exit(1)和exit(-1)表示程序異常退出,exit(2)表示系統找不到指定的文件。在整個程序中,只要調用exit就結束。 線程

 

  2)return是語言級別的,它表示了調用堆棧的返回;return是返回函數值並退出函數,一般0爲正常退出,非0爲非正常退出,請注意,若是是在主函數main, 天然也就結束當前進程了(也就是說,在main()裏面,你能夠用return n,也可以直接用exit(n)來作),若是不是在main函數中,那就是退回上一層調用。在多個進程時,若是有時要檢測上個進程是否正常退出,就要用到上個進程的返回值。xml

 

 

  二、進程環境與進程控制進程

 

  exit(int n)其實就是直接退出程序,由於默認的標準程序入口爲 int main(int argc, char** argv),返回值是int型的。通常在shell下面,運行一個程序,而後使用命令echo $?就能獲得該程序的返回值,也就是退出值。內存

 

  理論上exit能夠返回小於256的任何整數,返回的不一樣數值主要是給調用者做不一樣處理的。get

 

  對於單獨的進程exit的返回值是返回給操做系統的,但若是是多進程,則是返回給父進程的。父進程裏面調用waitpid()等函數獲得子進程退出的狀態,以便做不一樣處理。根據相應的返回值來讓調用者做出相應的處理。

 

  總的說來,exit()就是當前進程把其控制權返回給調用該子程序的主程序, 括號裏的是返回值,告訴調用程序該程序的運行狀態。

  

  1)進程的開始:

 

  C程序是從main函數開始執行, 原型以下: int main(int argc, char *argv[]); 一般main的返回值是int型, 正確返回0。

  

  2)進程終止:

 

  C程序的終止分爲兩種: 正常終止和異常終止。正常終止分爲: return, exit, _exit, _Exit, pthreade_exit。異常中指分爲: abort, SIGNAL, 線程響應取消。

相關文章
相關標籤/搜索