Chcę ograniczyć liczbę procesów na użytkownika na moim komputerze za pomocą /etc/security/limits.conf
i wartości nproc.
Czytałem tutaj, że Linux nie rozróżnia procesów i wątków?
Mój aktualny limit nproc na użytkownika wynosi 1024, ale jeśli obejmuje to również wątki, moim zdaniem jest zbyt niski. Strona limits.conf
podręcznika tylko wspomina o „procesie” dla nproc i nic więcej.
// edytuj // przykładowy kod w C ++ z 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 (usunięto niektóre wiersze):
$ 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)
Mój laptop korzysta z ~ 130 procesów w stanie bezczynności. Tak więc nproc , lub Linux w szerszym ujęciu, nie rozróżnia procesów i wątków. Wydaje mi się to rozsądne, ponieważ wątki mogą również wyczerpać, nie tylko procesy.