nproc
あなたが話している制限は、実行可能なエンティティに適用されます 、したがって、スレッド(したがって、それらを含むプロセス)を制限しています .すべてのプロセスには少なくとも 1 つのスレッド (プライマリ スレッド) があるため、スレッドのみを実行できます。 .厳密に言えば、プロセスは「実行可能」ではありません。
この回答は、Linux におけるスレッドとプロセスの実際の違いを説明しています。
daya でコードをテストしました の答え( sleep(1);
も追加) スレッドコードで) そして彼とは異なり (?!)、あまりにも多くのスレッドが作成されたときに制限に達しました:pthread_create()
EAGAIN
を返していました . pthread_create(3)
ドキュメントには、このエラーについて次のように記載されています:
再び
別のスレッドを作成するためのリソースが不足しているか、システムが課したスレッド数の制限に達しました。後者のケースは 2 つの方法で発生する可能性があります。実ユーザー ID のプロセス数を制限する RLIMIT_NPROC ソフト リソース制限 (setrlimit(2) で設定) に達した。または、カーネルのシステム全体のスレッド数の制限 /proc/sys/kernel/threads-max に達しました。
具体的なについて言及されていません カーネル ソースのスレッドごとの制限、RLIMIT_NPROC
しか表示されない これは limits.conf
で変更できる制限です (nproc
の場合) )、ulimit -u
または setrlimit(2)
.