/* fork-malloc.c Jun 2001, WG */ /* based on stressKernel by brianmc1@us.ibm.com */ /* CCFLAGS = -c -pthread -o$@ LINKFLAGS = -pthread */ #include #include #include #include #include #include extern void malloc_stats(); void *mallocThread(void *arg) { char * buf; //printf("In mallocThread\n"); buf = malloc(117); if(!buf) printf(" malloc failed"); free(arg); usleep(1200); free(buf); return 0; } void *reallocThread(void *arg) { char * buf, * buf2; //printf("In reallocThread\n"); buf2 = malloc(17); if(!buf2) printf(" malloc failed"); buf = realloc(arg, 228); if(!buf) { printf(" malloc failed"); free(arg); } usleep(800); free(buf); free(buf2); return 0; } void *mkdirThread(void *arg) { char name[16]; int rc; //printf("In mkdirThread\n"); sprintf(name,"dir%ld", (long)pthread_self()); rc = mkdir(name, 0777); if (rc != 0) { printf(" mkdir failed\n"); return 0; } rmdir(name); free(arg); //printf("Out mkdirThread\n"); return 0; } void *forkThread(void *arg) { pid_t pid; //printf("In forkThread\n"); #if 0 pid = fork(); if (pid == 0) { // child int rc; char* buf = malloc(12); if(!buf) printf(" malloc failed"); free(arg); freopen("/dev/null", "w", stdout); free(buf); rc = execl("/bin/ps",NULL); if (rc != 0) { printf(" ps failed\n"); return 0; } } #endif #if 0 pid = fork(); if (pid == 0) { // child int rc; freopen("/dev/null","w",stdout); rc = execl("/bin/df","-k",NULL); if (rc != 0) { printf(" df failed\n"); return 0; } } #endif pid = fork(); if (pid == 0) { // child #if 1 //printf("= %5d =======================\n", getpid()); free(arg); exit(0); #else int rc; freopen("/dev/null","w",stdout); rc = execl("/bin/echo", "echo", "Hola", NULL); if (rc != 0) { printf(" echo failed\n"); return 0; } #endif } else if(pid > 0) printf("= %5d =======================\n", pid); else printf("*** fork failed\n"); free(arg); //printf("Out forkThread\n"); return 0; } int createThread( void *(*f)(void *), void* arg ) { pthread_attr_t attr; pthread_t tid; //tid = calloc(sizeof(pthread_t), 1); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if ( pthread_create(&tid, &attr, f, arg) != 0) { printf("failed to create Thread\n"); free(arg); return -1; } return 0; } int main(int argc, char* argv[]) { int i, count = 0, max = 100000; char* buf; if(argc > 1) max = atoi(argv[1]); for(count=0; count