使用excevp時,如何區分命令執行失敗和命令執行以非零退出代碼結束的情況?如何區分使用execvp時的執行情況?
1
A
回答
0
這是常見的_exit(127)
如果EXEC失敗,然後讓父母解釋說退出代碼爲Exec失敗(貝殼,system
,並且posix_spawn
都這麼做 - 這實際上意味着他們不能告訴我們,如果孩子做了exec和返回127或exec失敗)。
如果你想要一個超級健壯的解決方案,你可以在分叉之前創建一個O_CLOEXEC
標記管道,然後讓子進程通過管道發送execv引發的errno到父節點。
2
如果命令執行失敗(即不啓動)execvp
將返回-1,並且errno
將包含相關的錯誤代碼。
如果命令執行成功,則execvp
不返回。調用execvp
的父進程可以調用wait
來獲取該命令的返回值,無論是零還是非零。
相關問題
- 1. 如何在重複行的情況下執行多列分區?
- 2. 使用execvp執行touch c
- 3. 執行與execvp
- 4. 如何在沒有重新分區的情況下並行執行Spark UDF
- 5. 的執行情況(^)
- 6. 允許使用execvp執行程序
- 7. 如何在某些情況下使用EF執行刪除行?
- 8. 在不使用malloc分配內存的情況下執行memcpy
- 9. 如何在不使用xsd:sequence的情況下執行排序?
- 10. 在不使用BLOB的情況下執行批處理執行
- 11. 使用execvp()執行進程時加載用戶環境;
- 12. 鎖的執行情況()
- 13. 百分比使用情況如何?
- 14. 如何分析內存使用情況?
- 15. 在opencltemplate中執行內核時的內存使用情況
- 16. 使用fork執行UNIX命令,執行execvp
- 17. 如何在分區對象時遍歷所有情況
- 18. 如何在超時情況下執行套接字的AcceptAsync?
- 19. 跟蹤最壞情況執行時間
- 20. execvp將不執行命令
- 21. 如何在使用SQL Server的情況下進行分組?
- 22. 在多行的情況下使用WITH子句進行執行
- 23. 執行情況EVP_CipherInit_ex/EVP_CipherUpdate/EVP_CipherFinal_ex
- 24. 如何使用execvp()和grep?
- 25. 需要澄清分佈式測試的用戶執行情況
- 26. execvp()系統調用不執行
- 27. 系統調用execvp沒有執行
- 28. 在區分大小寫的情況下創建的myisam表比不區分大小寫的執行更好嗎?
- 29. 使用mysql時的情況
- 30. 如何區分以下兩種情況下用C
您是否閱讀過手冊頁? – Olaf
「*當命令的執行以非零退出代碼結束時*」,則命令得到* exec * uted。所以'execvp()'成功了。如果'execvp()'成功,它不會返回。然後,父級需要調用wait()或waitpid()來收集進程的返回碼。 – alk