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