2013-08-19 42 views
2

我在我的qnx系統上運行mongoose 3.7服務器。系統()調用返回255,但之後執行

我收到http請求以升級固件。根據請求,我使用請求處理程序中的system()調用來升級固件。

但奇怪的是,system()返回255.與貓鼬2.0相同的調用工作。

更爲奇怪的,這是我通過電話system()作品發出它我使用WEXITSTATUS知道哪些system()回報

任何想法,爲什麼這種情況正在發生錯誤返回255

之後的命令?

回答

3

我發現這個問題..

的問題是,貓鼬回電螺紋,其發出系統()命令不會等待返回狀態監守這行:

在mg_start( )功能,啓動服務器線程,他們已包括這一行:

mg_start()行沒有5159:

(void) signal(SIGCHLD, SIG_IGN); 

他們^ h大聲這樣做,以便不創建殭屍進程。

編號:http://www.win.tue.nl/~aeb/linux/lk/lk-5.html

不過,據QNX文件,

「設置爲有待批 導致掛起的信號的信號的信號動作SIG_IGN被丟棄,它是否是 被屏蔽。如果一個進程設置爲SIGCHLD信號的動作 SIG_IGN,行爲是不確定的。」

呼籲SIG_IGNSIGCHLD導致父進程忽略孩子的狀態信號。

當我們調用system()調用時,它會阻止來自正在啓動的shell的SIGCHLD信號。根據UNIX文件:「阻止SIGCHLD在等待孩子終止防止 從捕獲的信號和來自 系統獲取狀態()的子進程system()之前可以得到狀態本身的應用」

但是,由於貓鼬捨棄了信號,所以它根本不等待來自system()的信號。

它只是繼續提供沒有從system()有效返回狀態的響應。

我剛纔註釋掉了這一行。它正在工作。

相關問題