gpt4 book ai didi

perl - 子进程中不需要的打开套接字

转载 作者:行者123 更新时间:2023-12-03 11:58:33 24 4
gpt4 key购买 nike

我有一个PERL脚本,该脚本正在创建许多套接字(大约700个套接字),然后对这些套接字进行处理。之后,它使用system(...)命令启动另一个应用程序,该应用程序将打开更多的套接字(例如800个左右),但是由于每个进程的套接字数限制为1024,我超出了限制,并且无法从套接字号1024及更高版本。

现在我的问题是这样的:

  • 系统命令是否使启动的应用程序继承所有打开的文件描述符/套接字?
  • 如果对上述问题的回答是"is",那么还有其他方法可以启动另一个应用程序,以使启动的应用程序不继承文件描述符吗?
  • 如果对2的回答为否,那么是否有某种方法可以关闭子进程中的所有继承的文件描述符?
  • 最佳答案

    看一下perlvar $^F,它控制为close-on-exec设置哪些文件描述符。默认设置应该是在调用system()时关闭所有这些套接字描述符,但是如果没有,也许$ ^ F没有设置为您想要的值。在Linux系统上进行判断的一种非常快速简便的方法是在您现有的system()调用之前立即尝试此调用:

    system("ls -l /proc/self/fd");

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

    关于perl - 子进程中不需要的打开套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8625775/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com