今天在遇到一個問題,在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;