テストシステムの実験で/etc/security/limits.conf
システムにログインしたとき、16個のプロセスが実行されていました(すべてのuidにruid、euid、suidがあります)。
まず、ハード制限とソフト制限を20に設定してみました。ログアウトした後はプロセスを作成できないため、再度ログインできません。 30個に制限を増やしましたが、まだ入ることができません。プロセス制限を 50 に増やすと入ることができますが、zsh
一部のエラーが発生します。私は2つのプロセスをさらに作ることができることを知り、それがすべてでした。
私の質問は、制限をN(この場合は20)に設定しても機能しない理由です。正確にNプロセスを制限に強制しますか?ユーザーが制限に近づくと、制限が適用されますか?それ以外の場合は、限度未満のスペースがあるため、なぜより多くのプロセスを作成できないのか理解できません。
標準のDebianでLinux 4.19を実行する(systemdベース)
編集する:
プロセスを計算するために、以下を試しました。
ps ux
:14個のプロセスが作成されます。
より良い測定のため
cat /proc/*/status | grep Uid | grep 1000 | wc -l
:16個のプロセスを作成します。
予想される違いは、オネライナーが使用する追加のプロセスによって発生します。
(my uid)の出力はgrep 1000
次のようになります.
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
Uid: 1000 1000 1000 1000
これは、すべてが実際、有効、保存、およびfsuid 1000(私)で実行されていることを示しています。
私はプロセスを信頼して独自に計算するので、正確に13のプロセスがあると思いますps
。したがって、プロセスは13個でなければなりません。そうですか?
答え1
によるとman 2 setrlimit
:
RLIMIT_NPROC This is a limit on the number of extant process (or, more precisely on Linux, threads)
確かにこれはやや直感的です。いずれにせよ、ログインプロセスは多数のスレッドを生成でき、スレッド数が約20または30に設定されている場合、これらのスレッドは制限を超えます。
ログインテストをしてみるそれから制限を下げ、エラーが発生するまで単純なシングルスレッドプロセスを分岐します。制限は期待どおりに機能します。