system报错现象:
在Linux下用system()函数执行命令时出错,返回-1,错误原因NO child processes。
分析:
根据官方手册,如果SIGCHLD信号行为被设置为SIG_IGN时,waitpid()函数有可能因为找不到子进程而报ECHILD错误。
问题的解决方案:
在调用system()函数前重新设置SIGCHLD信号为缺省值,即signal(SIGCHLD, SIG_DFL)。现已解决!将所有使用system命令的地方,采用封装函数system_monthpay(项目中的函数)。(目前程序中子进程信号确实设置了忽略,UNIX系统下未出现类似情况)
以下为实际项目中的修改方法: