From dfcba1d84b054fa52049feda0e5c7e47d040d544 Mon Sep 17 00:00:00 2001 From: kremlin Date: Sun, 2 Nov 2014 20:19:02 -0500 Subject: [PATCH] created sep dirs for hw/labs, write lab 5 --- lab/lab5/Makefile | 12 ++++++++++++ lab/lab5/zombie.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 lab/lab5/Makefile create mode 100644 lab/lab5/zombie.c diff --git a/lab/lab5/Makefile b/lab/lab5/Makefile new file mode 100644 index 0000000..fec97f3 --- /dev/null +++ b/lab/lab5/Makefile @@ -0,0 +1,12 @@ +.PHONY: all + +cc=/usr/bin/gcc +CARGS=-Wall -Werror -Wextra -pedantic -Wno-unused-parameter -Wno-unused -std=c99 +SRC=zombie.c -o zombie + +all: + $(CC) $(CARGS) $(SRC) + +debug: + $(CC) $(CARGS) $(SRC) -g -O0 + diff --git a/lab/lab5/zombie.c b/lab/lab5/zombie.c new file mode 100644 index 0000000..12b6d67 --- /dev/null +++ b/lab/lab5/zombie.c @@ -0,0 +1,39 @@ +#include +#include +#include + +#include +#include + +pid_t children[5]; + +void announce_death() { + + printf("i'm pid #%lu and i died.\n", (long) getpid()); +} + +int main(int argc, char *argv[]) { + + pid_t our_pid; + our_pid = getpid(); + + for(int i = 0; i < 5; i++) { + if((children[i] = fork()) == 0) + goto child; + else + sleep(1); + } + + for(int i = 0; i < 5; i++) { + + kill(children[i], SIGTERM); + wait(0); + } + + return 0; + + child: + printf("i'm pid #%lu!\n", (long)getpid()); + atexit(announce_death); + exit(0); +} -- 2.41.0