#include #include #include #include #include #include #include #include int main(int argc, const char* argv[]) { if (argc > 2) { fprintf(stdout, "Bunu 152120151053 @atacankilic yazdi.\n"); fprintf(stderr, "%s fazlasiyla arguman ile calistirildi, iptal ediliyor!\n", argv[0]); exit(0); if (argc < 2) { fprintf(stdout, "Bunu 152120151053 @atacankilic yazdi.\n"); fprintf(stderr, "%s integer arguman ile calistirilmali, iptal ediliyor\n", argv[0]); exit(0); } } if (argc == 2) { if (atoi(argv[1]) < 2 || !isdigit(argv[1][0])) { fprintf(stdout, "Bunu 152120151053 @atacankilic yazdi.\n"); fprintf(stderr, "Yanlis arguman. Derinlik degeri birden buyuk bir integer olmalidir (%d).\n", atoi(argv[1])); return 0; } } const int agacDerinligi = atoi(argv[1]); int geciciDerinlik = agacderinligi; int pidEbeveyn = getpid(); int pid; while (geciciDerinlik--) { pid = fork(); if ((geciciDerinlik + 1) == agacDerinligi) { if (pid == 0) { printf("----------logs/151053_uyg2A_logAll.log----------\n\n"); system("[ -r logs/151053_uyg2A_logAll.log ] && cat logs/151053_uyg2A_logAll.log"); printf("-----------------------------------\n\n"); printf("-----------------------------------\n"); sleep(2); } else { fprintf(stdout, "Process ID : %d, Parent Process ID : %d forked...\n", getpid(), getppid()); fprintf(stdout, "will create logs/ folder 1 second later\n\n"); sleep(1); system("mkdir -p logs && \ touch logs/151053_uyg2A_logAll.log && \ echo "" >> logs/151053_uyg2A_logAll.log && \ date >> logs/151053_uyg2A_logAll.log"); } } else if ((pid != 0) || (pidEbeveyn == getpid())) { if (pid != 0) break; else if (pidEbeveyn == getpid()) { pid_t child_two_pid = getpid(); fprintf(stdout, "Process ID : %d, Parent Process ID : %d forked...\n", getpid(), getppid()); break; } } else { fprintf(stdout, "Process ID : %d, Parent Process ID : %d forked...\n", getpid(), getppid()); } } sleep(1); if (pidEbeveyn == getpid() && pid != 0) { char command[1024]; sprintf(command, " pstree -p %d && \ echo 'PID: %d depth: %d' >> logs/151053_uyg2A_logAll.log && \ pstree -p %d >> logs/151053_uyg2A_logAll.log && \ echo "" >> logs/151053_uyg2A_logAll.log", pidEbeveyn, pidEbeveyn, agacDerinligi, pidEbeveyn); system(command); } wait(NULL); int status; wait(&status); if (WIFEXITED(status)) printf("Process ID : %d, Parent Process ID : %d terminated... \n", getpid(), getppid()); return 0; }