0
A
回答
2
當使用exec
系列函數之一時,不希望函數返回。程序計數器從取代調用進程的二進制映像的第一條指令開始。
從達爾文手冊頁:
如果任何EXEC()函數返回時,會發生錯誤。 返回值是-1,全局變量errno將被設置爲 指示錯誤。
有評論詢問以下,但它已被刪除:
如果你是在一個子進程,並execl
成功,那麼孩子的過程是由新的二進制取代。如果失敗,則控制返回到該子進程(調用者)。如果這就是你要求的,fork
和exec
之間沒有嚴格的關係。如果您處於子進程中,並且exec
失敗,那麼您有一個「分叉」子進程,它是原始父進程的副本。此時您可能想要打印一些錯誤消息並退出子進程。
如果你想知道爲什麼它失敗了,你可以使用下面的模式:
if (execl(...)) {
perror(NULL);
exit(errno);
}
例如,嘗試運行此程序,錯誤信息將顯示如何修復程序:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (const int argc, char * const argv[]) {
if (execl("ls", "ls", "-la", NULL)) {
perror(NULL);
exit(errno);
}
return 0;
}
解決方案,在這種情況下使用execlp
而不是execl
。
+0
是的,我刪除了它,因爲我正在寫一個新的:)謝謝 – almanegra 2014-09-01 02:50:05
相關問題
- 1. Ubuntu中的execl()參數
- 2. 在Linux下的c execl命令ubuntu
- 3. Ubuntu上的Nodejs或節點沒有任何回報
- 4. execl在unix中的行爲
- 5. EXECL和printf的 - 爲了
- 6. 在execl中的路徑(linux)
- 7. C++ dup2和execl
- 8. Execl Permission Denied
- 9. 的Java:如果回報,如果回報VS如果回報-ELSEIF回報
- 10. grep的回報
- 11. Lua的回報
- 12. ç獲取與EXECL
- 13. Ubuntu升級後Git誤報
- 14. STDERR_FILENO在ubuntu上未申報
- 15. 量子(12.10)Ubuntu的回購
- 16. 如何在ubuntu的警報對話框中顯示nagios警報?
- 17. 在execl中打開.txt文件()
- 18. Html.Serialize回報的NullReferenceException
- 19. jQuery的回報PHP
- 20. 回報Date.parse NaN的
- 21. navigator.network回報的PhoneGap
- 22. 的Grails:OUT與回報
- 23. 使用Execl執行我的程序
- 24. Execl和打印的兒童PID
- 25. execl在Linux中的功能c
- 26. 在Execl的刪除樣式使用C#
- 27. execl()的參數傳遞給哪裏?
- 28. 當我在VMware的回報R組取得了3握手與Ubuntu
- 29. System.currentTimeMillis的()爲int的回報
- 30. jQuery的回報率的onclick
兩者都不;父母的過程繼續其快樂的方式,無論孩子做什麼(除非父母決定等待孩子死亡)。祖父母不知道它的孫子。任何'exec *()'函數返回的唯一時間是失敗。 – 2014-09-01 02:47:11
謝謝。我認爲任何時候函數被孩子調用時,execl函數都會返回到「父親」進程。 – almanegra 2014-09-01 02:52:07