[英]system() always returns non-zero when called as CGI
從cgi調用system()時,它總是返回-1(表示錯誤)。 errno設置為10,ECHILD。
test.cgi包含:
cout << "/bin/true " << system("/bin/true") << endl;
cout << "/bin/false " << system("/bin/false") << endl;
cout << "/bin/touch /tmp/foo" << system("/bin/touch /tmp/foo") << endl;
從命令行調用,因為./test.cgi返回:
/bin/true 0
/bin/false 256
/bin/touch /tmp/foo 0
但是將此作為來自Web瀏覽器的鏈接調用返回(在可預期的格式錯誤的標題錯誤消息之后):
/bin/true -1
/bin/false -1
/bin/touch /tmp/foo -1
我已經驗證了在兩種情況下都執行了命令(文件/ tmp / foo已創建),但是通過httpd(mongoose,ARM9,Linux)調用它們會返回-1。
任何提示,如何解決?
由於ECHILD
錯誤,您的system
調用失敗。 wait
等待時會發生這種情況,但沒有待處理的子進程。 可能的原因是您的代碼(或您調用的某些代碼)已將SIGCHLD
的信號處理程序設置為SIG_IGN
。 要對此進行測試,可以將SIGCHLD
信號處理程序設置為SIG_DFL
,以便在調用system
之前將其恢復為默認信號處理程序。
我不想超越自己,所以檢查以上測試是否成功。 如果是這樣,如果程序是單線程的,則可以考慮將測試用作修復程序,並將信號處理程序恢復為system
完成后設置的內容。 但是,實際的解決方法是找出設置信號處理程序的位置和原因,然后判斷你想要做什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.