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


摘自: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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM