From 5b9736bf793623ed5e95cde3a3e6017399ecd095 Mon Sep 17 00:00:00 2001 From: Manuel Traut Date: Wed, 9 Jan 2019 17:30:15 +0100 Subject: add a zombie example To show that processes become zombies if you don't wait. Also show that init becomes the father of your zombies if the original father dies. Signed-off-by: Manuel Traut --- schulung_tools/zombie/Makefile | 8 ++++++++ schulung_tools/zombie/README | 2 ++ schulung_tools/zombie/zombie.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 schulung_tools/zombie/Makefile create mode 100644 schulung_tools/zombie/README create mode 100644 schulung_tools/zombie/zombie.c (limited to 'schulung_tools/zombie') diff --git a/schulung_tools/zombie/Makefile b/schulung_tools/zombie/Makefile new file mode 100644 index 0000000..58c8196 --- /dev/null +++ b/schulung_tools/zombie/Makefile @@ -0,0 +1,8 @@ +CFLAGS += -g + +zombie: zombie.c + +clean: + rm -f zombie + +.PHONY: clean diff --git a/schulung_tools/zombie/README b/schulung_tools/zombie/README new file mode 100644 index 0000000..8c8561a --- /dev/null +++ b/schulung_tools/zombie/README @@ -0,0 +1,2 @@ +This program demonstrates that children processes will become zombies if +they exit but the parent does not clean them up. diff --git a/schulung_tools/zombie/zombie.c b/schulung_tools/zombie/zombie.c new file mode 100644 index 0000000..cc5e145 --- /dev/null +++ b/schulung_tools/zombie/zombie.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +int main(void) +{ + pid_t pid; + int i; + + for (i = 0; i < 10; i++) { + pid = fork(); + if (pid == -1) { + printf("fork() failed\n"); + return 0; + } else if (pid == 0) { + printf("child: pid=%d\n", getpid()); + sleep(10); + printf("child: exiting pid=%d\n", getpid()); + return 0; + } else { + printf("parent: created child %d\n", pid); + } + } + +/* if we don't clean up the children, they are zombies */ +#if 0 + while (wait(&i) != -1) + /* NOP */; +#endif + +/* if we don't clean up the children and the main process terminates + * init becomes parent of the childs + */ +#if 0 + while (1) + sleep(100); +#endif + + return 0; +} -- cgit v1.2.3