linux下system函數錯誤返回-1,錯誤緣由NO child processes的解決辦法

    今天在遇到一個問題,在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;
相關文章
相關標籤/搜索