首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子进程中不需要的打开套接字

问子进程中不需要的打开套接字
EN

Stack Overflow用户
提问于 2011-12-24 16:52:14
回答 1查看 584关注 0票数 1

我有一个PERL脚本,它正在创建大量的套接字(大约700个套接字),然后使用这些套接字进行操作。之后,它使用system(...)命令启动另一个应用程序,该应用程序会打开更多的套接字(比如800个左右),但是由于每个进程的套接字数量的限制是1024,所以我超过了限制,并且没有从套接字编号1024及以后获得预期的数据。

现在我的问题是:

  1. 系统命令是否使启动的应用程序继承所有打开的文件描述符/套接字?
  2. 如果对上述问题的回答是肯定的,那么是否有其他方法来启动另一个应用程序,使已启动的应用程序不继承文件描述符?
  3. 如果2的答案是“否”,那么是否有办法关闭子进程中所有继承的文件描述符?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-24 17:32:26

看看perlvar $^F,它控制哪些文件描述符被设置为关闭-on-exec。默认设置应该是在调用system()时关闭所有这些套接字描述符,但如果不是,则可能$^F没有设置为您想要的。在Linux系统上,一个非常快速和简单的方法是在现有的system()调用之前尝试这个调用:

代码语言:javascript
复制
system("ls -l /proc/self/fd");

ls的输出将显示在执行"ls“命令时仍打开哪些文件。您很可能会看到只有stdin、stdout和stderr (描述符0、1和2)是打开的,但是如果您看到套接字描述符打开,我将尝试设置$^F =2,看看这是否有帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8625775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档