Je souhaite limiter le nombre de processus par utilisateur sur ma machine, avec /etc/security/limits.conf
et la valeur nproc.
J'ai lu ici que Linux ne fait pas de distinction entre les processus et les threads?
Ma limite de nproc actuelle par utilisateur est de 1024, mais si cela inclut également les threads, elle est trop faible à mon avis. La page de manuel de limits.conf
ne mentionne que "process" pour nproc et rien d'autre.
// modifier // exemple de code en C ++ avec 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 (supprimé quelques lignes):
$ 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)
Mon ordinateur portable utilise environ 130 processus tout en étant inactif. Donc, nproc , ou Linux dans une vue plus large, ne fait pas de distinction entre les processus et les threads. Ce qui me semble raisonnable, car les threads pourraient aussi épuiser, pas seulement les processus.