【发布时间】:2011-12-24 16:52:14
【问题描述】:
我有一个 PERL 脚本,它创建了很多套接字(大约 700 个套接字),然后对这些套接字进行处理。之后,它使用system(...) 命令启动另一个应用程序,该应用程序打开更多套接字(例如 800 个左右),但由于每个进程的套接字数量限制为1024,我超过了限制并且没有得到套接字号 1024 及以后的预期数据。
现在我的问题是:
- 系统命令是否使启动的应用程序继承所有打开的文件描述符/套接字?
- 如果上述问题的答案是肯定的,那么是否有其他方法可以启动另一个应用程序,使启动的应用程序不继承文件描述符?
- 如果 2. 的答案是否定的,那么有没有办法关闭子进程中所有继承的文件描述符?
【问题讨论】:
-
假设这是一个类 UNIX 系统,每个用户的 fd 限制是多少?
-
每个用户有限制吗?我不知道...每个进程的限制设置为 1024(所以 0 到 1023 工作正常,而 1024 失败)...
-
我的意思是用户进程的资源限制可能低于系统的资源限制。你能在 system() 之前打印
$^F吗?你可以试试system('ulimit -n; exec your_command ...')看看当前的限制吗? -
我知道限制是 1024...关于如何增加这个限制的任何想法?
标签: perl sockets system parent-child