主进程创建了一个socket,监听某一个端口(9999),然后执行system函数调用一个程序system("service nagios restart ")。
当主进程结束后, netstat -anp | less 发现端口9999被nagios占用。原因是子进程继承了父进程的资源。使socket
的引用变为2了,父进程结束socket的引用计数减为1,所以端口不会被关闭。
解决方法:
利用fcntl函数,设置socket遇到exec函数族的时候自动关闭,这样就不会造成socket泄漏了。
具体代码为,在创建socket以后,设置:
int val = 0;
val = fcntl(clifd,F_GETFL,0) ;
fcntl(clifd,F_SETFD,val|FD_CLOEXEC)
这样就可以了
参考:
http://blog.csdn.net/zhsp1029/article/details/4037057 http://blog.csdn.net/chrisniu1984/article/details/7050663
阅读(1804) | 评论(0) | 转发(3) |