init.c (649B)
1 // init: The initial user-level program 2 3 #include "types.h" 4 #include "stat.h" 5 #include "user.h" 6 #include "fcntl.h" 7 8 char *argv[] = { "sh", 0 }; 9 10 int 11 main(void) 12 { 13 int pid, wpid; 14 15 if(open("console", O_RDWR) < 0){ 16 mknod("console", 1, 1); 17 open("console", O_RDWR); 18 } 19 dup(0); // stdout 20 dup(0); // stderr 21 22 for(;;){ 23 printf(1, "init: starting sh\n"); 24 pid = fork(); 25 if(pid < 0){ 26 printf(1, "init: fork failed\n"); 27 exit(); 28 } 29 if(pid == 0){ 30 exec("sh", argv); 31 printf(1, "init: exec sh failed\n"); 32 exit(); 33 } 34 while((wpid=wait()) >= 0 && wpid != pid) 35 printf(1, "zombie!\n"); 36 } 37 }