xref: /xv6-public/init.c (revision 34295f46)
1eb52c7deSrsc // init: The initial user-level program
2eb52c7deSrsc 
317a85657Srtm #include "types.h"
4e958c538Skaashoek #include "stat.h"
5e958c538Skaashoek #include "user.h"
617a85657Srtm #include "fcntl.h"
717a85657Srtm 
8*34295f46Srsc char *argv[] = { "sh", 0 };
917a85657Srtm 
1017a85657Srtm int
main(void)1117a85657Srtm main(void)
1217a85657Srtm {
1339c84ccfSrsc   int pid, wpid;
1417a85657Srtm 
15dfcc5b99Srtm   if(open("console", O_RDWR) < 0){
1607090dd7Srsc     mknod("console", 1, 1);
17dfcc5b99Srtm     open("console", O_RDWR);
1817a85657Srtm   }
198e1d1ec9Skaashoek   dup(0);  // stdout
208e1d1ec9Skaashoek   dup(0);  // stderr
2117a85657Srtm 
22db8fb62eSrsc   for(;;){
231b789e1dSrsc     printf(1, "init: starting sh\n");
2417a85657Srtm     pid = fork();
25dfcc5b99Srtm     if(pid < 0){
261b789e1dSrsc       printf(1, "init: fork failed\n");
2717a85657Srtm       exit();
2817a85657Srtm     }
29dfcc5b99Srtm     if(pid == 0){
30*34295f46Srsc       exec("sh", argv);
311b789e1dSrsc       printf(1, "init: exec sh failed\n");
32dfcc5b99Srtm       exit();
3317a85657Srtm     }
3439c84ccfSrsc     while((wpid=wait()) >= 0 && wpid != pid)
351b789e1dSrsc       printf(1, "zombie!\n");
3617a85657Srtm   }
37dfcc5b99Srtm }
38