今天在遇到一个问题,在Linux下用system()函数执行命令时出错,返回-1,错误缘由NO child processes。在网上查找了一下发现是若是SIGCHLD信号行为被设置为SIG_IGN时,waitpid()函数有可能由于找不到子进程而报ECHILD错误。彷佛咱们找到了问题的解决方案:在调用system()函数前从新设置SIGCHLD信号为缺省值,即signal(SIGCHLD, SIG_DFL)。 html
因此根据网上介绍的方法果然解决了。方法以下: 函数
typedef void (*sighandler_t)(int); int pox_system(const char *cmd_line) { int ret = 0; sighandler_t old_handler; old_handler = signal(SIGCHLD, SIG_DFL); ret = system(cmd_line); signal(SIGCHLD, old_handler); return ret; }代码引用自 http://www.verydemo.com/demo_c167_i3191.html;