From 62313be582a5abd3a114eec3c9f5770ea37ef766 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Sun, 7 Jul 2019 06:39:31 -0400 Subject: [PATCH] another fork test --- user/usertests.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/user/usertests.c b/user/usertests.c index 199346c..9d46b1a 100644 --- a/user/usertests.c +++ b/user/usertests.c @@ -506,6 +506,40 @@ twochildren(void) printf(1, "twochildren ok\n"); } +void +forkforkfork(void) +{ + printf(1, "forkforkfork test\n"); + + unlink("stopforking"); + + int pid = fork(); + if(pid < 0){ + printf(1, "fork failed"); + exit(); + } + if(pid == 0){ + while(1){ + int fd = open("stopforking", 0); + if(fd >= 0){ + exit(); + } + if(fork() < 0){ + close(open("stopforking", O_CREATE|O_RDWR)); + } + } + + exit(); + } + + sleep(2); + close(open("stopforking", O_CREATE|O_RDWR)); + wait(); + sleep(1); + + printf(1, "forkforkfork ok\n"); +} + void mem(void) { @@ -1824,6 +1858,7 @@ main(int argc, char *argv[]) reparent(); twochildren(); + forkforkfork(); argptest(); createdelete();