From 95dad4c061d6e1f036d75cc041367a8f12b92982 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Sat, 15 Aug 2020 05:46:32 -0400 Subject: x --- user/init.c | 16 ++++++++++++++-- user/initcode.S | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'user') diff --git a/user/init.c b/user/init.c index 5df6deb..13764ca 100644 --- a/user/init.c +++ b/user/init.c @@ -31,8 +31,20 @@ main(void) printf("init: exec sh failed\n"); exit(1); } - while((wpid=wait(0)) >= 0 && wpid != pid){ - //printf("zombie!\n"); + + for(;;){ + // this call to wait() returns if the shell exits, + // or if a parentless process exits. + wpid = wait((int *) 0); + if(wpid == pid){ + // the shell exited; restart it. + break; + } else if(wpid < 0){ + printf("init: wait returned an error\n"); + exit(1); + } else { + // it was a parentless process; do nothing. + } } } } diff --git a/user/initcode.S b/user/initcode.S index ca76972..e8f7a91 100644 --- a/user/initcode.S +++ b/user/initcode.S @@ -1,4 +1,4 @@ -# Initial process execs /init. +# Initial process that execs /init. # This code runs in user space. #include "syscall.h" -- cgit v1.2.3