我有一个PERL脚本,它创建了很多套接字(大约700个套接字),然后用这些套接字填充。之后,它使用system(...)
命令启动另一个应用程序,该应用程序打开更多套接字(如800左右),但由于每个进程的套接字数量限制为1024
,我超出限制并且不要从套接字号1024及以后获取预期数据。
现在我的问题是:
答案 0 :(得分:3)
查看控制为close-on-exec设置哪些文件描述符的perlvar $^F。调用system()时,默认设置应该是关闭所有套接字描述符,但如果没有,可能$ ^ F未设置为您想要的。在Linux系统上告诉的一种非常快速简便的方法是在现有的system()调用之前尝试此调用:
system("ls -l /proc/self/fd");
ls的输出将显示执行“ls”命令时打开的文件。很可能你会看到只有stdin,stdout和stderr(描述符0,1和2)是打开的,但如果你看到你的套接字描述符打开,我会尝试设置$ ^ F = 2,看看是否有帮助。 / p>