Am scapat de examene asa ca m-am apucat sa ma joc putin cu threadurile din
linux, cum am fagaduit... So, primele concluzii:
1) sunt limitat la 255 de threaduri create / process (cel putin pe sistemul
meu. S-ar putea sa nu fie o valoare standard, ma uit mai incolo)
2) nr. max de threaduri e limitat (sysctl kernel.threads-max, 14336 in cazul
meu). Nu am observat vreun limitator per process sau per user.
3) Nu sunt/pot fi limitat din ulimit (sau nu m-am prins eu cum). Oricum se
poate face un thread bomb (~=fork bomb in cazul de fata) dupa cum se vede in
programul de mai jos. Partea frumoasa e ca nu ocup nici prea mult timp pe
procesor, de treaba asta ocupandu-se kernelul :) Partea urata e ca daca (2) e
adevarata pot face sistemul inutilizabil pe partea de threaduri.
4) Partea si mai proasta e ca mi-am luat un reboot in dinti cand l-am stresat
vreo 30 de mins.
Any feedback is much appreciated,
M
---
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/resource.h>
void *aici (void*)
{
while (1) sleep (100);
return NULL;
}
main ()
{
struct rlimit lim;
getrlimit (RLIMIT_NPROC,&lim);
printf ("limitat la %d procese... cui ii pasa ? incerc sa generez %d procese
:)\n",lim.rlim_cur,lim.rlim_cur*256);
pthread_t th;
pid_t a;
for (int i=0;i<lim.rlim_cur-1;i++) {
printf ("Forking !\n");
a=fork ();
if (a==-1) perror ("Fork");
if (a==0) break;
sleep (3);
}
for (int i=0;i<255;i++) if (pthread_create (&th,NULL,aici,NULL)) perror
("Pthread");
while (1) sleep (100);
}
---
Pentru dezabonare, trimiteti mail la
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/