#include #include #include #include #include #include #include #include #define GOD_PRIORITY 100000 #define ONE_PRIORITY 90 #define TWO_PRIORITY 100 #define THREE_PRIORITY 110 #define FOUR_PRIORITY 80 #define FIVE_PRIORITY 70 #define SIX_PRIORITY 60 void loop() { int i, j; for(i=0;i<10000;++i) for(j=0;j<100000;++j) {} } int main(int argc, char **argv) { pid_t pid, pid2, pid3, pid4, pid5, pid6; int i, j, time; char files[6][40]; FILE *in[3]; FILE *out; struct sched_param param; unsigned int begin; char line[1000]; int stime; param.sched_priority = 23; setgid(GOD_PRIORITY); sched_setscheduler( 0, 3, ¶m ); pid=pid2=pid3=pid4=pid5=pid6=-1; begin=clock(); setgid(ONE_PRIORITY); pid=fork(); if(pid>0) { setgid(TWO_PRIORITY); pid2=fork(); } if(pid2>0) { setgid(THREE_PRIORITY); pid3=fork(); } if(pid3>0) { setgid(FOUR_PRIORITY); pid4=fork(); } if(pid4>0) { setgid(FIVE_PRIORITY); pid5=fork(); } if(pid5>0) { setgid(SIX_PRIORITY); pid6=fork(); } if(pid==0) { loop(); printf("1 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else if(pid2==0) { loop(); printf("2 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else if(pid3==0) { loop(); printf("3 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else if(pid4==0) { loop(); printf("4 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else if(pid5==0) { loop(); printf("5 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else if(pid6==0) { loop(); printf("6 FINISHED\n"); printf("Time elapsed(uS): %u\n",clock()-begin); exit(0); } else { setgid(GOD_PRIORITY); time=1; sprintf(files[0],"/proc/%d/stat",pid); sprintf(files[1],"/proc/%d/stat",pid2); sprintf(files[2],"/proc/%d/stat",pid3); sprintf(files[3],"/proc/%d/stat",pid4); sprintf(files[4],"/proc/%d/stat",pid5); sprintf(files[5],"/proc/%d/stat",pid6); out=fopen("RESULTS","w"); while(1) { fprintf(out,"%d\n",time); for(i=0;i<6;++i) { if((in[i]=fopen(files[i],"r"))) { fgets(line,1000,in[i]); strtok(line," \n"); for(j=0;j<12;++j) strtok(NULL," \n"); stime=atoi(strtok(NULL," \n")); fprintf(out,"%d) %d\n",i+1,(int)stime); fclose(in[i]); } else fprintf(out,"NOT RUNNING\n"); } time++; fprintf(out,"\n"); waitpid(-1, NULL, WNOHANG); if(kill(pid,0) == -1 && kill(pid2,0)==-1 && kill(pid3,0)==-1 && kill(pid4,0)==-1 && kill(pid5,0)==-1 && kill(pid6,0)==-1) break; //wait(NULL); //exit(1); usleep(1000000); } fclose(out); exit(0); } }