问题背景:
我们这边开发了一个动态库给客户用,动态库里面会调用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这个问题在goog