diff src/usr/forktest.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/forktest.c	Fri May 26 23:11:05 2017 +0900
@@ -0,0 +1,59 @@
+// Test that fork fails gracefully.
+// Tiny executable so that the limit can be filling the proc table.
+
+#include "types.h"
+#include "stat.h"
+#include "user.h"
+
+#define N  1000
+
+void
+printf(int fd, char *s, ...)
+{
+    write(fd, s, strlen(s));
+}
+
+void
+forktest(void)
+{
+    int n, pid;
+    
+    printf(1, "fork test\n");
+    
+    for(n=0; n<N; n++){
+        pid = fork();
+        if(pid < 0)
+				{
+						printf(1, "fork failed!\n");
+            break;
+				}
+        if(pid == 0)
+            exit();
+    }
+    
+    if(n == N){
+        printf(1, "fork claimed to work N times!\n", N);
+        exit();
+    }
+    
+    for(; n > 0; n--){
+        if(wait() < 0){
+            printf(1, "wait stopped early\n");
+            exit();
+        }
+    }
+    
+    if(wait() != -1){
+        printf(1, "wait got too many\n");
+        exit();
+    }
+    
+    printf(1, "fork test OK\n");
+}
+
+int
+main(void)
+{
+    forktest();
+    exit();
+}