Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- /* stad bierzemy m.in. funcje "sleep" */
- #include <unistd.h>
- int a = 0;
- int b = 0;
- void porzadki(int signal) //funkcja usuwajaca procesy
- {
- kill(a, signal);
- kill(b, signal);
- printf("program konczy dzialanie ...\n");
- exit(1);
- }
- void signals_handler(int signal) { //obsluga sygnalow
- psignal(signal, "\nSygnal");
- printf("Numer sygnalu to: %d\n", signal);
- kill(getppid(), signal);
- return;
- }
- void signals1_handler(int signal) {
- kill(getppid(), signal);
- return;
- }
- void sig_handler(int sig) { //obsluga sygnalow
- sigset_t mask_set;
- sigset_t old_set;
- sigfillset(&mask_set);
- sigdelset(&mask_set, SIGTSTP);
- sigdelset(&mask_set, SIGUSR1);
- sigprocmask(SIG_SETMASK, &mask_set, &old_set);
- pause();
- sigprocmask(SIG_SETMASK, &old_set, NULL);
- return;
- }
- int main(void) {
- if (fork() == 0) // P1
- {
- printf("Pierwszy proces: PID: %d\n", a = getpid());
- printf("PPID: %d\n\n", getppid());
- if (fork() == 0) // P2
- {
- printf("Drugi proces: PID: %d\n\n", b = getpid());
- signal(SIGINT, signals_handler);
- signal(SIGUSR1, sig_handler); // ignoruje określony sygnał
- for (int i=0;i=10; i++) // wypisanie kropek
- {
- printf("*\n");
- sleep(4);
- }
- system("clear");
- return 0;
- }
- return 0;
- }
- signal(SIGINT, signals1_handler);
- signal(SIGUSR1, sig_handler);
- signal(SIGQUIT, porzadki); //wywołanie zakonczenia programu
- for (;;)
- pause();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement