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;
}

 

posted @ 2021-11-30 13:51  LiuYanYGZ  阅读(1950)  评论(0编辑  收藏  举报