Voglio limitare il numero di processi per utente sulla mia macchina, con /etc/security/limits.conf
e il valore nproc.
Ho letto qui che Linux non dovrebbe distinguere tra processi e thread?
Il mio attuale limite nproc per utente è 1024, ma se questo include anche i thread, è troppo basso dal mio punto di vista. La pagina di limits.conf
manuale menziona solo "processo" per nproc e nient'altro.
// modifica // codice di esempio in 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;
}
test (rimosso alcune righe):
$ 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)
Il mio laptop utilizza ~ 130 processi mentre è inattivo. Quindi nproc , o Linux in una visione più ampia, non distingue tra processi e thread. Il che mi sembra ragionevole, perché i thread potrebbero anche esaurire, non solo i processi.