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/


Raspunde prin e-mail lui