Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <signal.h>
- #include <unistd.h>
- #include <string.h>
- // __pid_t to tak naprawde typedef int czyli można spokojnie dać
- // int m, p1, p2;
- __pid_t m, p1, p2;
- void handler_proc2(int signal)
- {
- printf("\nPID: %d | Name of signal: %s | Signal number: %d\n", p2, strsignal(signal), signal);
- fflush(stdout);
- if (signal == SIGINT)
- kill(m, signal);
- }
- void handler_main(int signal)
- {
- if (signal == SIGINT)
- {
- kill(p1, SIGKILL);
- kill(p2, SIGKILL);
- kill(m, SIGKILL);
- }
- }
- int main()
- {
- m = getpid();
- printf("Main PID: %d\n", m);
- if (fork() == 0)
- {
- p1 = getpid();
- printf("Process1 PID: %d\n", p1);
- sigset_t mask;
- sigfillset(&mask);
- sigprocmask(SIG_SETMASK, &mask, NULL);
- // while(1) mozna zastapic tym: for(;;)
- while(1)
- {
- fprintf(stderr, "!");
- fflush(stderr);
- sleep(5);
- }
- }
- if (fork() == 0)
- {
- p2 = getpid();
- printf("Process2 PID: %d\n", p2);
- for (int i = 0; i < _NSIG; i++)
- signal(i, handler_proc2);
- while (1)
- pause();
- }
- sigset_t maska;
- sigfillset(&maska);
- sigdelset(&maska, SIGINT);
- sigprocmask(SIG_SETMASK, &maska, NULL);
- signal(SIGINT, handler_main);
- while (1)
- pause();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement