web-dev-qa-db-ja.com

Mac OS X10.6でのulimitの奇妙な動作

Ulimitを使用すると、非常に奇妙な動作が発生します。新しいシェルを開くだけです

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

/etc/launchd.conf内のファイルの制限を無制限に設定したとしても、これがデフォルトのようです。しかし、それは別の日の別の質問です。

ここで、ファイルの数を1024に増やして、新しい設定をもう一度見てみましょう。

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

さて、それはうまくいきます。涼しい!もう一度設定を変更しましょう

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

繰り返しますが、それはうまく機能します。もう一度高い値に変更しましょう

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

これは今何ですか?

これをSudoしようとしてもエラーは発生しませんが、値も変更されません。

Hector:~ robertj$ Sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

ここで何が起こっているのですか?

私は完全に困惑しています!

どんな助けでも大歓迎です...

Robertj

8
robertj

あなたを混乱させる2つのことがあります。 1つ目は、各リソースにハード制限とソフト制限の両方があることです。 ulimit -n 512セット両方それらの、しかしulimit -aはソフト制限のみを表示します。ハード制限を設定すると、それを減らすことしかできません。

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

あなたを混乱させる2番目のことはSudo ulimitあなたが思っていることをしません。 (ルート)サブプロセスを生成し、開いているファイルの制限を設定しますそのサブプロセスに対して、そしてサブプロセスを終了します。制限はプロセスごとの設定であるため、制限をSudoで変更しても、何の役にも立ちません。

18
Gordon Davisson