簡體   English   中英

當被調用為CGI時,system()始終返回非零值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM