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) .