我在我的qnx系統上運行mongoose 3.7服務器。系統()調用返回255,但之後執行
我收到http請求以升級固件。根據請求,我使用請求處理程序中的system()
調用來升級固件。
但奇怪的是,system()
返回255.與貓鼬2.0相同的調用工作。
更爲奇怪的,這是我通過電話system()
作品發出它我使用WEXITSTATUS
知道哪些system()
回報
任何想法,爲什麼這種情況正在發生錯誤返回255
之後的命令?
我在我的qnx系統上運行mongoose 3.7服務器。系統()調用返回255,但之後執行
我收到http請求以升級固件。根據請求,我使用請求處理程序中的system()
調用來升級固件。
但奇怪的是,system()
返回255.與貓鼬2.0相同的調用工作。
更爲奇怪的,這是我通過電話system()
作品發出它我使用WEXITSTATUS
知道哪些system()
回報
任何想法,爲什麼這種情況正在發生錯誤返回255
之後的命令?
我發現這個問題..
的問題是,貓鼬回電螺紋,其發出系統()命令不會等待返回狀態監守這行:
在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_IGN
上SIGCHLD
導致父進程忽略孩子的狀態信號。
當我們調用system()
調用時,它會阻止來自正在啓動的shell的SIGCHLD信號。根據UNIX文件:「阻止SIGCHLD
在等待孩子終止防止 從捕獲的信號和來自 系統獲取狀態()的子進程system()
之前可以得到狀態本身的應用」
但是,由於貓鼬捨棄了信號,所以它根本不等待來自system()
的信號。
它只是繼續提供沒有從system()
有效返回狀態的響應。
我剛纔註釋掉了這一行。它正在工作。