2016-09-17 47 views
1

使用excevp時,如何區分命令執行失敗和命令執行以非零退出代碼結束的情況?如何區分使用execvp時的執行情況?

+1

您是否閱讀過手冊頁? – Olaf

+0

「*當命令的執行以非零退出代碼結束時*」,則命令得到* exec * uted。所以'execvp()'成功了。如果'execvp()'成功,它不會返回。然後,父級需要調用wait()或waitpid()來收集進程的返回碼。 – alk

回答

0

這是常見的_exit(127)如果EXEC失敗,然後讓父母解釋說退出代碼爲Exec失敗(貝殼,system,並且posix_spawn都這麼做 - 這實際上意味着他們不能告訴我們,如果孩子做了exec和返回127或exec失敗)。

如果你想要一個超級健壯的解決方案,你可以在分叉之前創建一個O_CLOEXEC標記管道,然後讓子進程通過管道發送execv引發的errno到父節點。

2

如果命令執行失敗(即不啓動)execvp將返回-1,並且errno將包含相關的錯誤代碼。

如果命令執行成功,則execvp不返回。調用execvp的父進程可以調用wait來獲取該命令的返回值,無論是零還是非零。