system報錯現象:
在Linux下用system()函數執行命令時出錯,返回-1,錯誤原因NO child processes。
分析:
根據官方手冊,如果SIGCHLD信號行爲被設置爲SIG_IGN時,waitpid()函數有可能因爲找不到子進程而報ECHILD錯誤。
問題的解決方案:
在調用system()函數前重新設置SIGCHLD信號爲缺省值,即signal(SIGCHLD, SIG_DFL)。現已解決!將所有使用system命令的地方,採用封裝函數system_monthpay(項目中的函數)。(目前程序中子進程信號確實設置了忽略,UNIX系統下未出現類似情況)
以下爲實際項目中的修改方法: