これはとても奇妙です。私の設定でこれを試していますulimit
。60000
startup.sh
#!/bin/bash
ulimit -n 60000
echo "Hello! File Descriptor set"
(755ファイル権限)でこれを行うことができ、./startup.sh
エコーラインはエラーなく印刷されます。ただし、これを行ってもulimit -n
表示されます1024
。何が起こっているのでしょうか?
驚くべきことにulimit -n 60000
、端末に入力して実行するとulimit -n
完璧に動作します。スクリプトでファイル記述子の制限を設定できないのはなぜですか?
Debian 8、64ビット。 OpenVZコンテナ
答え1
これは、制限がシェルスクリプト、つまりbash
スクリプトを実行して生成されたシェル(この場合)内に設定されているためです(カーネルは実際にスクリプトをシェルに引数として渡します)。
したがって、スクリプトの実行が完了するとそれ殻も消えました(そして制限的です)。その後、元のシェルに戻ります。
テストするには、ulimit -n
内部でスクリプトを実行してください。
答え2
ulimit -n
プロセスは、それ自体および子プロセスに対してのみ制限を設定できます。プロセス固有の制限ではなくグローバル制限を設定しようとしています。必要に応じてグローバル制限を設定するには、次のようにsetrlimit()
Pythonresource.RLIMIT_NOFILE
スクリプトを作成できます。resource
基準寸法。