Limit
ulimit -n 和 /proc/$PID/limits 之間的區別
在 Linux 中,有打開文件的限制。我可以
ulimit -n
用來查看打開文件限制,預設為 1024。然後我還可以通過查看 /proc/$PID/limits 來查看每個程序打開文件的軟/硬限制。我看到軟 = 1024 和硬 = 4096。我想知道這兩個輸出有什麼區別?
另外,是否
setRlimit()
適用getRlimit()
於系統範圍或每個程序?
ulimit -n
預設設置軟限制;您可以添加-H
選項來查看/設置硬限制。大多數情況下,軟限制和硬限制的行為如下:
- root 的程序(實際上,任何帶有 的程序
CAP_SYS_RESOURCE
)可能會提高或降低對任何程序的任何限制。- 任何使用者的程序都可以降低對該使用者擁有的其他程序的任何限制。
- 任何使用者的程序都可以將軟限制提高到該使用者擁有的程序的硬限制。
- 如果程序嘗試超過其軟限制,則嘗試將失敗。
因此,硬限製作為軟限制的上限(除了 root,他通常可以做任何事情)。
有一個例外:軟 CPU 限制發送
SIGXCPU
信號。程序可能會選擇忽略它,或者花時間進行清理等。一旦超過硬 CPU 限制,核心就會發送SIGKILL
- 這是不可擷取、不可處理或不可忽略的。因此,在這種情況下,軟限制用作警告“您的 CPU 時間已用完——結束並立即退出,否則!” 硬性限制是“否則”。大多數是每個程序的,但少數(例如
RLIMIT_NPROC
)是每個使用者的。getrlimit(2)手冊頁指定了每個限制。