Ich möchte die Anzahl der Prozesse pro Benutzer auf meinem Computer mit /etc/security/limits.conf
und den Wert nproc begrenzen.
Ich habe hier gelesen , dass Linux nicht zwischen Prozessen und Threads unterscheidet.
Mein aktuelles nproc-Limit pro Benutzer beträgt 1024, aber wenn dies auch Threads enthält, ist es aus meiner Sicht zu niedrig. Die Manpage limits.conf
erwähnt nur "Prozess" für nproc und sonst nichts.
// bearbeite // Beispielcode in C ++ mit Boost // g ++ -o boost_thread boost_thread.cpp -lboost_thread
#include <unistd.h>
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
int counter;
void print_thread(int i) {
counter++;
cout << "thread(" << i << ") counter " << counter << "\n";
sleep(5);
counter--;
}
int main() {
int i = 0;
int max = 1000000;
while (i < max) {
boost::thread(print_thread, i);
i++;
}
return 0;
}
Test (einige Zeilen entfernt):
$ ulimit -u
1024
$ ./thread
...
...
...
thread(828) counter 828
thread(829) counter 829
thread(830) counter 830
thread(831) counter 831
thread(832) counter 832
thread(610) counter thread(833833) counter 834
thread(834) counter 835
thread(835) counter 836
thread(836) counter 837
thread(837) counter 838
thread(838) counter 839
thread(839) counter 840
thread(840) counter 841
thread(841) counter 842
thread(842) counter 843
thread(843) counter 844
thread(844) counter 845
thread(845) counter 846
thread(846) counter 847
thread(847) counter 848
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error> >'
what(): boost::thread_resource_error
Aborted (core dumped)
Mein Laptop verwendet im Leerlauf ca. 130 Prozesse. Daher unterscheidet nproc oder Linux im weiteren Sinne nicht zwischen Prozessen und Threads. Das erscheint mir vernünftig, denn Threads könnten auch anstrengend sein, nicht nur Prozesse.