diff src/usr/init.c @ 0:83c23a36980d

Init
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Fri, 26 May 2017 23:11:05 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/usr/init.c	Fri May 26 23:11:05 2017 +0900
@@ -0,0 +1,37 @@
+// init: The initial user-level program
+
+#include "types.h"
+#include "stat.h"
+#include "user.h"
+#include "fcntl.h"
+
+char *argv[] = { "sh", 0 };
+
+int
+main(void)
+{
+    int pid, wpid;
+    
+    if(open("console", O_RDWR) < 0){
+        mknod("console", 1, 1);
+        open("console", O_RDWR);
+    }
+    dup(0);  // stdout
+    dup(0);  // stderr
+    
+    for(;;){
+        printf(1, "init: starting sh\n");
+        pid = fork();
+        if(pid < 0){
+            printf(1, "init: fork failed\n");
+            exit();
+        }
+        if(pid == 0){
+            exec("sh", argv);
+            printf(1, "init: exec sh failed\n");
+            exit();
+        }
+        while((wpid=wait()) >= 0 && wpid != pid)
+            printf(1, "zombie!\n");
+    }
+}