系统相关
首页 > 系统相关> > linux下system函数错误返回-1,错误原因NO child processes的解决办法

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

 

标签:processes,old,SIGCHLD,错误,NO,int,system,ret,SIG
来源: https://www.cnblogs.com/LiuYanYGZ/p/15623923.html