Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1746019
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-08-08 10:25:51

原文地址:linux system函数调用问题 作者:yiyuandao

主进程创建了一个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
阅读(118) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~