2014-04-19 28 views
0

我每5分鐘在C++中執行system()函數。它在一段時間內工作正常,並且由於ECHILD錯誤而返回-1失敗。爲什麼有時會發生這個問題?爲了避免這種情況,我將SIGCHLD設置爲SIG_DFL,之後它工作正常。但是在程序中有一個用於其他功能的SIGCHLD處理程序。將SIGCHLD設置爲SIG_DFL對其他函數有影響嗎?C++中的system()函數在一段時間內工作正常,並且由於ECHILD錯誤而無法返回-1。爲什麼?

+0

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。如果其他代碼依賴於SIGCHLD的處理程序,並且您將其抑制,那麼可能會出現問題。目前還不清楚在system()調用期間你甚至可以將SIGCHLD處理設置爲SIG_DFL;信號可能在功能執行時到達。 –

+0

在失敗的情況下,命令是否實際執行?或者在命令執行之前失敗? – Gabe

+0

在執行該命令期間,SIGCHLD將被阻止 –

回答

1

可能你應該做的是在調用system()之前將SIGCHLD設置爲SIG_DFL,然後在system()返回之後重新註冊你的SIGCHLD處理程序。

但也許不止於此,您應該認真思考爲什麼要調用system()。這通常不是這份工作的最佳工具。

相關問題