system)改写
Linux system()是fork()+execl() 不会关闭从父进程继承过来的文件描述符 如果使用system()调用生命期短的进程一般问题不大,如果调用一个生命期比主进程还长的进程肯定有问题,比如在主进程中打开了一个socket并绑定了一个固定的端口,然后用system()调用一个生命期比主进程还长的命令,如果此时主进程挂了,再起来的时候绑定同一个端口会失败,因为socket已经被子进程占用,端口已经被子进程绑定。 其实正确高效的做法应该是使用fcntl设置文件描述符不可被继承。
用户评论