我有一個創建大量套接字(大約700個套接字)的PERL腳本,然後用這些套接字做東西。之後,它使用system(...)
命令啓動另一個應用程序,該應用程序可以打開更多的套接字(例如800左右),但由於每個進程的套接字數量限制爲1024
,因此我超出了限制,並且沒有從中獲得預期數據插座號碼1024及以上。在子進程中不需要的打開套接字
現在我的問題是這樣的:
- 系統是否命令make推出繼承所有打開的文件描述符/套接字的應用程序?
- 如果上述問題的答案是肯定的,那麼還有其他一些方法來啓動另一個應用程序,以使啓動的應用程序不會繼承文件描述符嗎?
- 如果2.的答案爲否,那麼是否有某種方法可以關閉子進程中的所有繼承的文件描述符?
假設這是一個類UNIX系統,每用戶fd限制是多少? – pilcrow
每個用戶是否有限制?我不知道... 每個進程的限制設置爲1024(所以0到1023工作正常,並且1024失敗)... – mtahmed
我的意思是用戶的進程可能有一個資源限制低於系統。你可以在system()之前打印'$^F'嗎?你可以試試'system('ulimit -n; exec your_command ...')'來查看當前的限制嗎? – pilcrow