summaryrefslogtreecommitdiff
path: root/schulung_tools/zombie/zombie.c
diff options
context:
space:
mode:
Diffstat (limited to 'schulung_tools/zombie/zombie.c')
-rw-r--r--schulung_tools/zombie/zombie.c41
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;
+}