2012-07-30 62 views
0

據我所知,exit(1)指示的錯誤,例如:退出(0)的目的是什麼?

if (something went wrong) 

    exit(EXIT_FAILURE); 

但是,什麼是使用exit(EXIT_SUCCESS);的目的是什麼?

當處理進程可能嗎?例如爲fork()

感謝

+4

如果你發現你的程序已經完成了所有需要做的事情,並且不在'main()'中,那麼你可以調用'exit(0)'。 – 2012-07-30 18:00:08

+0

@DanielFischer:那麼你的意思是說,這是讓我的代碼返回到它的調用函數,而不使用'return'的方法嗎? – ron 2012-07-30 18:07:08

+1

這是一種幾乎立即結束程序執行的方式(某些正常關機例程可能會在預定時間運行)與指定的退出代碼。如果通過「調用函數」來表示shell或類似的話,那麼是的;如果你的意思是在同一個程序中有一些功能,那麼不需要。 – 2012-07-30 18:15:30

回答

6

這給調用程序(通常是指令殼)的方式,以檢查是否在程序正常或不終止該系統的一部分。

編輯 - 啓動 -

順便說一句,可以通過使用$? shell變量來查詢一個交互式命令的退出代碼。例如,這個失敗的ls命令產生值爲2的退出代碼。

$ ls -3 
ls: invalid option -- '3' 
Try `ls --help' for more information. 
$ echo $? 
2 

編輯 - 結束 -

試想一個批處理文件(或shell腳本),調用了一系列的方案,並根據每次運行的結果可能會選擇一些動作或其他。這個動作可能包含一個簡單的消息給用戶,或者調用其他一些程序或一組程序。

這是程序返回其運行狀態的一種方式。

另外,請注意,表示沒有問題,任何非零值指示的問題。

程序通常會使用不同的非零值傳遞更多信息(除了非正常終止之外)。因此,非零出口值作爲更具體的錯誤代碼,可以識別特定的問題。當然,這取決於代碼的含義是可用的(通常是/文檔有望在)

例如,ls man page在底部此位的信息:

退出狀態爲0,如果OK ,如果小問題1,如果嚴重麻煩2。

對於Unix/Linux手冊頁,請查看標題爲EXIT STATUS的部分以獲取此信息。

+0

0確實表示成功,但非零值可能表示問題,也可能不表示問題。根據1999 C 7.20.4.3 5,除0,EXIT_SUCCESS或EXIT_FAILURE之外的任何值的含義都是實現定義的。例如,一個實現可以使用狀態的低位來表示成功或失敗,高位表示傳遞附加信息,例如處理了多少小部件。 – 2012-07-30 18:28:09

+0

@EricPostpischil謝謝..這是有用的信息和有益的知識。 – Levon 2012-07-30 20:06:37

+0

它也允許人確定程序是否正常終止。只是說 – 2012-07-30 21:29:25

1

您只能通過調用return函數從主函數中退出程序。要從其他地方退出程序,可以調用exit(EXIT_SUCCESS)。例如,當用戶點擊退出按鈕時。

+0

好吧,你也可以在'main'中使用'exit()'當然是 – pb2q 2012-07-30 18:01:16

+0

!也許我不清楚 – 2012-07-30 18:03:28

1

這是一個系統調用。總是有系統調用好信息,如果您檢查手冊頁:

http://linux.die.net/man/3/exit

在Linux中,你可以簡單地輸入man exit到終端,該信息將出現。

1

「正常」退出程序有兩種方式:從main()返回,或致電exit()。正常情況下,exit()被用來表示失敗的信號。但是,如果您不在main()中,您仍然必須以某種方式退出。 exit(0)通常用於在不在main()時終止進程。

main()實際上並不是操作系統的特殊功能,只是針對運行時環境。實際上被加載的'函數'通常被定義爲_start()(這是由鏈接器處理的,超出了本答案的範圍),用匯編寫成,它簡單地準備環境並調用main()。從main()返回後,它還會調用exit(),返回值爲main()