
在代码的某个时候,我做一个系统(“pppd文件/ etc / ppp / myoptions&”);
之后,如果我做一个netstat -apn,它显示我的端口5060也为pppd打开!
有什么办法可以避免吗?这是Linux中系统功能的标准行为吗?
谢谢,
Elison
一般来说,任何时候,你的程序都会打开任何一段文件描述符,这个文件描述符会持续一段时间(例如你的例子中的一个监听套接字),不应该与孩子共享,你应该
fcntl(fd,F_SETFD,fcntl(fd,F_GETFD) | FD_CLOEXEC);
在文件描述符上.
截至2016年修改POSIX.1,您可以在创建套接字时使用SOCK_CLOEXEC标志或“套接字”类型自动获取此行为:
Listenfd = socket(AF_INET,SOCK_STREAM|SOCK_CLOEXEC,0);bind(Listenfd,...Listen(listemfd,...
即使某些其他同时运行的线程执行系统或fork exec调用,它将被正确关闭.幸运的是,这个标志已经在linux和BSD unixes上支持了一段时间(但不幸的是OSX).
总结以上是内存溢出为你收集整理的进程从系统命令开始,C继承父fd全部内容,希望文章能够帮你解决进程从系统命令开始,C继承父fd所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)