Linuxは制限を正しく適用しませんか?

Linuxは制限を正しく適用しませんか?

テストシステムの実験で/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に設定されている場合、これらのスレッドは制限を超えます。

ログインテストをしてみるそれから制限を下げ、エラーが発生するまで単純なシングルスレッドプロセスを分岐します。制限は期待どおりに機能します。

関連情報