2012-06-19 22 views
4

在Linux中,上inotify的情況下,一個進程可以打開的數量限制由每個用戶ID最大數量的限制,在的/ proc/SYS/FS/inotify的/ max_user_instances指定inotify FD - 爲什麼是每個用戶id的限制,而不是每個進程?

自然的事情將是以限制每個進程,例如文件FD。由於inotify FD受到用戶標識的限制,因此更有可能達到許多進程可能使用相同用戶標識運行的服務器上的限制。但我想這應該是有原因的?

這是一個程序問題,因爲我有我的代碼中使用的inotify,並要設置爲系統的權利限制。

+2

如果是每個進程,用戶可以非常容易地用一個簡單的'fork()'來繞開限制... – Flexo

+0

關於inotify實例,如果每個用戶標識都必須限制它,請注意,我們正在討論的只是添加了inotify手錶而不是添加inotify手錶。 – Manohar

回答

8

的原因是通過使用inotify看許多文件,以防止非root用戶加藥系統。 inotify結構需要不可忽略的內存量來維護(並且不能將其交換到磁盤),因此需要對非特權可以提交的數量進行限制。

用於具有類似的限制( max_user_instancesmax_user_watches

epoll,儘管在端max_user_instances除去和max_user_watches只是設定爲存儲器4%。

類似的補丁也許應該提交inotify的,但一直沒有那麼遠。

文件描述符上的每個進程限制了一個完全不同的原因是:當在過程開始一個文件描述符表中分配並其大小正比於文件描述符的最大允許數目。儘可能保持這一點可以減少每個進程的內存開銷。

相關問題