最新推荐文章于 2024-08-05 10:18:25 发布

Joseph_1118 于 2014-01-01 21:27:53 发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
博客介绍了在Linux环境中,动态库使用system调用进行insmod/rmmod操作时遇到system返回-1,errno为10(ECHILD)的问题。尽管system返回错误,但实际操作已完成。通过问题定位,排除了SIGCHILD信号处理方式设置为SIG_IGN的常见原因,发现是由于子进程成为僵尸进程后被其他线程抢先waitpid收尸导致。最终解决方案是让客户端将waitpid参数改为特定子进程的PID,避免抢尸现象。
问题背景:
我们这边开发了一个动态库给客户用,动态库里面会调用system来做insmod/rmmod的操作。拿到客户那边去测试,会随机性的出现system返回-1的问题,也就是system出错了!但是奇怪的是我们在system返回-1后去lsmod发现实际上insmod/rmmod是成功了的。把当时的errno和对应的出错信息打出来发现errno是10(ECHILD),对应的信息是No child processes。
问题定位:
早就听说过system函数不靠谱,一方面是安全方面,另一方面是因为其返回值太多,包含不同的含义。近来也确实体会到了这一点,有一次system出错返回的错误码是一个比较大的值,当时错误原因是因为用户的进程里的环境变量是NULL,导致system里面shell的环境变量是NULL,而当时我system是这样写的:system("rmmod xx.ko");直接导致找不到rmmod!后来弄了个绝对路径才解决问题。
system返回-1,错误码为errno这个问题在google上搜一下,结果一大把,但是基本都是说SIGCHILD的处理方式设置为SIG_IGN的问题。所以,一开始我们也怀疑是这个问题。毕竟我们的so是在客户的环境上用的,我们不清楚客户到底有没有忽略(我们
相关知识
linux多线程环境下的抢尸行为(system返回
Linux 环境下 NFS 服务安装及配置使用
Linux下启动mysql出现203错误码,求解决!!!膜拜大佬
Linux集群环境下监控Web服务器的Shell脚本设计.pdf资源
Linux busybox mount
java多线程面试题整理及答案
Linux 常用命令(持续补充)
多线程下解决资源竞争的7种方法
Linux环境下宠物理财商城金融系统搭建指南
【Linux】环境变量设置.bashrc及相关
网址: linux多线程环境下的抢尸行为(system返回 https://www.mcbbbk.com/newsview1290431.html