system函数错误返回-1 错误原因NO child processes
来源:互联网 发布:淘宝虚假广告怎么处罚 编辑:程序博客网 时间:2024/05/17 07:27
调用system函数执行一个shell命令,返回-1,错误提示no child processes 但system可以执行成功
原因是调用system之前有放置忽略SIGCHLD的语句
signal(SIGCHLD, SIG_IGN);
如果SIGCHLD信号行为被设置为SIG_IGN时,waitpid()函数有可能因为找不到子进程而报ECHILD错误。似乎我们找到了问题的解决方案:在调用system()函数前重新设置SIGCHLD信号为缺省值,即signal(SIGCHLD, SIG_DFL)。
解决办法 用pox_system()函数替代system(),只需要修改此处一个函数,其他调用处都不需要改。
- 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;
- }
- 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;
- }
SIG_DFL:默认信号处理程序
SIG_IGN:忽略信号的处理程序
测试过确实很奏效,感谢帖子的作者!
参考文章:http://my.oschina.net/renhc/blog/54582
0 0
- system函数错误返回-1 错误原因NO child processes
- linux下system函数错误返回-1 错误原因NO child processes
- linux下system函数错误返回-1 错误原因NO child processes
- linux下system函数错误返回-1 错误原因NO child processes
- linux下system函数错误返回-1 错误原因NO child processes
- linux多线程环境下的抢尸行为(system返回-1:No child processes)
- linux多线程环境下的抢尸行为(system返回-1:No child processes)http://www.aiuxian.com/article/p-129935.html
- C语言strerror()函数:返回错误原因的描述字符串
- jQuery .Ajax() 方法在IE浏览器返回No Transport错误原因?
- jQuery .Ajax() 方法在IE浏览器返回No Transport错误原因?
- jQuery .Ajax() 方法在IE浏览器返回No Transport错误原因?
- delphi system.pas not found 错误原因
- acedssget返回错误码-5001原因
- UpdateLayeredWindow返回317错误的原因
- GetLastError()返回错误对照函数
- ReadFile函数 WIN7 返回错误
- 错误日记 函数返回数组
- system 报错 No child process
- AndroidStudio 从基本到高级使用技巧
- android studio 改编译区背景色
- SQLite数据库
- 向数据库表中插入图片信息
- 利用MUI+个推实现APP消息推送
- system函数错误返回-1 错误原因NO child processes
- 15. 16. 18.3Sum 4sum
- 关于CH375芯片的简介以及其与51单片机的连接
- java集合和数组的排序总结
- java.security.KeyException 的解决方法
- 2016 ICPC 大连网络赛 HDU 5876 Sparse Graph
- 排序算法之插入排序
- Linux下Qt(5.6.1-1)程序的发布
- Android抓包工具fiddler