Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<unistd.h>
- #include<signal.h>
- #include<stdlib.h>
- int pid1;
- int pid2;
- int koniec;
- void sig_handler(int signal)
- {
- fprintf(stderr,"\nmoj numer pid to : %i otrzymalem sygnal numer: %i\n",getpid(),signal);
- return;
- }
- void zakoncz(int signal)
- {
- koniec = 1;
- return;
- }
- void sig_main(int signal)
- {
- kill(pid1,signal);
- kill(pid2,signal);
- printf("proces macierzysty konczy prace !\n");
- exit(0);
- }
- void sig_pid1(int signal)
- {
- kill(getppid(),23);
- }
- int main ()
- {
- koniec = 0;
- printf("\nNumer PID procesu macierzystego : %d\n",getpid());
- if(fork()==0)
- {
- pid1 = getpid();
- printf("Numer PID procesu potomnego nr1 : %d\n",pid1);
- for(int i = 0 ; i < 31 ; i++)
- {
- if( i!=23 && i != 24)
- signal(i,sig_handler);
- }
- signal(23,zakoncz);
- signal(24,sig_pid1);
- while(koniec == 0)
- {
- sleep(1);
- }
- printf("\nPotomek nr 1 z PID: %i konczy prace !\n",pid1);
- return 0;
- }
- if(fork()==0)
- {
- sigset_t mask;
- sigfillset(&mask);
- sigdelset(&mask,23);
- sigprocmask(SIG_BLOCK,&mask,NULL);
- signal(23,zakoncz);
- pid2 = getpid();
- printf("Numer PID procesu potomnego nr2 : %d\n",getpid());
- while (1)
- {
- for(int i = 0 ; i < 8 ; i++)
- {
- if(i%2==0)
- {
- printf("_");
- }
- else
- {
- printf("-");
- }
- sleep(1);
- fflush(stdout);
- if(koniec == 1)
- {
- printf("\nPotomek nr 2 z PID: %i konczy prace !\n",pid2);
- exit(0);
- }
- }
- printf("\n");
- }
- return 0;
- }
- sigset_t maska;
- sigfillset(&maska);
- sigdelset(&maska,23);
- sigprocmask(SIG_BLOCK,&maska,NULL);
- signal(23,sig_main);
- while(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement