リソースの制限に達しているため、EAGAIN を取得していると思います。実行できるスレッド/プロセスの数にはシステム制限があります。あなたはそれを見ることができます
cat /proc/sys/kernel/threads-max
で変更します
echo 100000 > /proc/sys/kernel/threads-max
それぞれ。プロセスのユーザー制限に達している可能性が高くなります。man ページを読み、 および で検索しgetrlimit
てulimit
ください。ここSOには、それらに関する情報がたくさんあります。
これらすべてのプロセスを 1 つの親から生成していると仮定すると、それらを追跡するのは簡単です。の前に、親のカウンターをインクリメントしますfork()
。子が子を生成している場合は、より複雑になり、共有メモリまたはその他の IPC メカニズムを使用する必要があります。いずれにせよ、システム コールとシステム コールを使用して子のステータスを判断し、wait()
それwaitpid()
に基づいてプロセス カウンタを減らすことができます。によって返されるステータス データは、wait
各子の終了処理を示します。繰り返しますが、問題が発生した場合に SO についてかなり詳しく説明する質問がかなりあります。
あなたの主な質問への答えとして、関心のあるリソースの一部についてシステムに (通常は /proc を介して) クエリを実行する方法があります。自分のリソースが心配な場合、これはほとんどの場合間違った方法です。それらを自分で追跡することは十分にあなたの能力の範囲内であり、はるかに効率的です.
幸運を。これがあなたを正しい方向に向けてくれることを願っています。