我用fork()來創建子進程。從子進程中我使用exec()來啓動新進程。我的代碼如下:C/C++ linux fork()和exec()
......
pid = fork();
if (pid > 0) {
WriteLog("Parent Process");
//Do something
} else if (pid == 0) {
WriteLog("Child process");
int return = execl(ShellScript);
if (return == -1)
WriteLog("Launch process fail");
} else {
WriteLog("Can't create child process");
}
......
注意:WriteLog函數將打開文件,寫入日誌和關閉文件。 (它被刷新) ShellScript將啓動新的進程c/C++。
我長時間運行我的程序,上面的代碼被調用很多次。有時(很少)有問題發生,雖然子進程已成功創建(我仔細檢查過),但新進程無法啓動成功。有一件事情是極端的誤解,當這個問題發生時,儘管子進程被創建成功,但「子進程」日誌不能被打印。
在正常情況下(沒有錯誤發生),打印「子進程」和「父進程」日誌的次數相同。
在異常情況下,雖然子進程始終創建成功,但它們並不相同。在此情況下,「啓動進程失敗」和「無法創建子進程」日誌不會被打印。 請幫我諮詢。
我很抱歉我的代碼不清楚。我剛剛更新。我曾經想過每次寫日誌時我都會沖洗。所以我用文件寫日誌。並且當子進程創建成功時,啓動進程失敗時日誌仍不會打印。 (我根據kill(childid)函數檢查這個東西 – bm2i
我會嘗試使用strerror和errno。目前我的系統也使用syslog和log文件來打印日誌,我會嘗試使用它。謝謝你一個好主意。 – bm2i
同時分叉進程總是小於7.所以我認爲它沒有超過限制 – bm2i