1 //example_1.c 2 3 #include <stdio.h> 4 5 int main(void){ 6 printf("Hello World!! . "); 7 return 0; 8 }
1 //example_2.c 2 #include <unistd.h> 3 #include <stdarg.h> 4 #include <time.h> 5 #include <sys/types.h> 6 #include <sys/wait.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 10 int tprintf(const char *fmt, ...){ 11 va_list args; 12 struct tm *tstruct; 13 time_t tsec; 14 tsec = time(NULL); 15 tstruct = localtime(&tsec); 16 printf("%02d:%02d:%5d|", tstruct->tm_hour, tstruct->tm_min, tstruct->tm_sec, getpid()); 17 va_start(args, fmt); 18 return vprintf(fmt, args); 19 } 20 int main(){ 21 int i=0, j=0; 22 int pid; 23 printf("Hello from Parent Process , PID is %d. ", getpid()); 24 pid = fork(); 25 if(pid == 0){ 26 sleep(1); 27 for(i=0; i<3; ++i){ 28 printf("Hello from Child Process %d. %d times ", getpid(), i+1);; 29 sleep(1); 30 } 31 } 32 else if(pid != -1){ 33 tprintf("Parent forked one child process -- %d. ", pid); 34 tprintf("Parent is waiting for child to exit. "); 35 waitpid(pid, NULL, 0); 36 tprintf("Child Process has exited. "); 37 tprintf("Parent had exited. "); 38 } 39 else tprintf("Everyting was done without error "); 40 return 0; 41 }
example_3.c
1 #include <unistd.h> 2 #include <stdarg.h> 3 #include <time.h> 4 #include <sys/types.h> 6 #include <sys/wait.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 10 int tprintf(const char *fmt, ...); 11 12 int main(int argc, char const *argv[]) 13 { 14 int pid; 15 pid = fork(); 16 if(pid == 0){ 17 sleep(5); 18 tprintf("Hello from Child Process ! "); 19 tprintf("I am calling exec. "); 20 execl("/bin/ps", "-a", NULL); 21 tprintf("You should never see this because child is already gone. "); 22 } 23 else if(pid != -1){ 24 tprintf("Hello from Parent, pid %d. ", getpid()); 25 sleep(1); 26 tprintf("Parent forked process %d. ", pid); 27 sleep(1); 28 tprintf("Parent is waiting for child to exit. "); 29 waitpid(pid, NULL, 0); 30 tprintf("Parent had exited. "); 31 } 32 else tprintf("Everything was done without error. "); 33 return 0; 34 } 35 36 int tprintf(const char *fmt, ...){ 37 va_list args; 38 struct tm *tstruct; 39 time_t tsec; 40 tsec = time(NULL); 41 tstruct = localtime(&tsec); 42 printf("%02d:%02d:%5d|", tstruct->tm_hour, tstruct->tm_min, tstruct->tm_sec, getpid()); 43 va_start(args, fmt); 44 return vprintf(fmt, args); 45 }
homework_1.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include <sys/wait.h> 5 #include <stdlib.h> 6 7 int main(){ 8 int pid; 9 pid = fork(); 10 if(pid > 0){ 11 pid = fork(); 12 if(pid >0){ 13 printf("parent : pid = %d ", getpid()); 14 waitpid(pid, NULL, 0); 15 printf("Child Process has exited. "); 16 printf("Parent had exited "); 17 exit(1); 18 } 19 else if(pid == 0){ 20 printf("child 2 : pid = %d ", getpid()); 21 exit(0); 22 } 23 } 24 else if(pid ==0){ 25 printf("child 1 : pid = %d ", getpid()); 26 exit(0); 27 } 28 return 0; 29 }
homework_2.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/types.h> 4 #include <sys/wait.h> 5 #include <stdlib.h> 6 7 int main(){ 8 int pid; 9 int n, i; 10 scanf("%d", &n); 11 for(i=0;i<n;++i){ 12 pid = fork(); 13 if(pid == 0){ 14 printf("child : pid : %d , ppid : %d ", getpid(), getppid()); 15 continue; 16 } 17 else if(pid > 0){ 18 waitpid(pid, NULL, 0); 19 exit(1); 20 } 21 } 22 return 0; 23 }
#include <stdio.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> int main(int argc, char const *argv[]) { int pid[5]; int i; for(i=0;i<5;++i){ pid[i] = fork(); if(pid[i]==0){ printf("zi(%d) pid: %d, fu pid: %d ", i+1, getpid(), getppid()); exit(0); } } for(i=0;i<5;++i) waitpid(pid[i], NULL, 0); printf("fupid: %d ", getpid()); return 0; }