摘自:https://my.oschina.net/woodyyang/blog/158852
今天在遇到一個問題,在Linux下用system()函數執行命令時出錯,返回-1,錯誤原因NO child processes。在網上查找了一下發現是如果SIGCHLD信號行為被設置為SIG_IGN時,waitpid()函數有可能因為找不到子進程而報ECHILD錯誤。似乎我們找到了問題的解決方案:在調用system()函數前重新設置SIGCHLD信號為缺省值,即signal(SIGCHLD, SIG_DFL)。
所以根據網上介紹的方法果真解決了。方法如下:
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; }