diff options
Diffstat (limited to 'schulung_tools/zombie/zombie.c')
| -rw-r--r-- | schulung_tools/zombie/zombie.c | 41 |
1 files changed, 41 insertions, 0 deletions
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 <stdio.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +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; +} |
