1 // example_1.c 2 3 #include <stdio.h> 4 5 int main( void ){ 6 printf( " Hello World!! .\n " ); 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.\n " , 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\n " , getpid(), i+ 1 );; 29 sleep( 1 ); 30 } 31 } 32 else if (pid != - 1 ){ 33 tprintf( " Parent forked one child process -- %d.\n " , pid); 34 tprintf( " Parent is waiting for child to exit.\n " ); 35 waitpid(pid, NULL, 0 ); 36 tprintf( " Child Process has exited.\n " ); 37 tprintf( " Parent had exited.\n " ); 38 } 39 else tprintf( " Everyting was done without error\n " ); 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 !\n " ); 19 tprintf( " I am calling exec.\n " ); 20 execl( " /bin/ps " , " -a " , NULL); 21 tprintf( " You should never see this because child is already gone.\n " ); 22 } 23 else if (pid != - 1 ){ 24 tprintf( " Hello from Parent, pid %d.\n " , getpid()); 25 sleep( 1 ); 26 tprintf( " Parent forked process %d.\n " , pid); 27 sleep( 1 ); 28 tprintf( " Parent is waiting for child to exit.\n " ); 29 waitpid(pid, NULL, 0 ); 30 tprintf( " Parent had exited.\n " ); 31 } 32 else tprintf( " Everything was done without error.\n " ); 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\n " , getpid()); 14 waitpid(pid, NULL, 0 ); 15 printf( " Child Process has exited.\n " ); 16 printf( " Parent had exited\n " ); 17 exit( 1 ); 18 } 19 else if (pid == 0 ){ 20 printf( " child 2 : pid = %d\n " , getpid()); 21 exit( 0 ); 22 } 23 } 24 else if (pid == 0 ){ 25 printf( " child 1 : pid = %d\n " , 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 \n " , 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 \n " , i+ 1 , getpid(), getppid()); exit( 0 ); } } for (i= 0 ;i< 5 ;++ i) waitpid(pid[i], NULL, 0 ); printf( " fupid: %d \n " , getpid()); return 0 ; }