diff options
author | fadhil riyanto <me@fadev.org> | 2024-09-28 08:32:03 +0700 |
---|---|---|
committer | fadhil riyanto <me@fadev.org> | 2024-09-28 08:32:03 +0700 |
commit | 1df6e9b87d30cd331a9b4b0abd7b655f933c7f93 (patch) | |
tree | 3ae5f273e50438115e339d6ec4b450cef2eda7cc | |
parent | 85964a41fd991a40f28c770f542c15432eafb715 (diff) |
test fork()
Signed-off-by: fadhil riyanto <me@fadev.org>
-rw-r--r-- | test/signalbychild.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/signalbychild.c b/test/signalbychild.c new file mode 100644 index 0000000..462daf4 --- /dev/null +++ b/test/signalbychild.c @@ -0,0 +1,60 @@ + +#include <signal.h> + +#include <stdio.h> +#include <unistd.h> +#include <sys/wait.h> + +int volatile g_signal_need_exit = 0; +int saved_ppid = 0; + +void signal_notify(int signum) +{ + if (saved_ppid == getpid()) { + + printf("parent got signal %d\n", signum); + } + + g_signal_need_exit = 1; + +} + +static void install_signal(void) +{ + struct sigaction sa; + + sa.sa_handler = signal_notify; + + if (sigaction(SIGINT, &sa, NULL) == -1) { + perror("sigaction"); + } + +} + +static void enter_eventloop(void) +{ + while(!g_signal_need_exit) { + + } + printf("thread exit\n"); + + _exit(0); + +} + +int main(void) +{ + saved_ppid = getpid(); + install_signal(); + + for(int i = 0; i < 5; i++) { + if (fork() == 0) { + enter_eventloop(); + + /* raise(SIGUSR1); */ + + } + } + + while(wait(NULL) > 0); +}
\ No newline at end of file |