Quiero limitar el número de procesos por usuario en mi máquina, con /etc/security/limits.conf
y el valor nproc.
¿He leído aquí que Linux no distingue entre procesos y subprocesos?
Mi límite actual de nproc por usuario es 1024, pero si esto incluye también hilos, en mi punto de vista es demasiado bajo. La página de manual de limits.conf
solo menciona "proceso" para nproc y nada más.
// editar // código de muestra en C ++ con 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;
}
prueba (eliminó algunas líneas):
$ 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)
Mi computadora portátil utiliza ~ 130 procesos mientras está inactiva. Entonces , nproc , o Linux en una vista más amplia, no se distingue entre procesos y subprocesos. Lo que me parece razonable, porque los hilos también podrían agotar, no solo los procesos.