Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <unistd.h>
- int pid1, pid2 = 0;
- void wyswietlSygnaly(int signal){
- printf("\nMoj nr PID to: %d", getpid());
- printf(" : Numer sygnalu to: %d\n", signal);
- psignal(signal,"\nOtrzymalem sygnal");
- return;
- }
- void wyswietlSygnalQuit(int signal){
- printf("\nMoj nr PID to: %d", getpid());
- printf(" : Numer sygnalu to: %d\n", signal);
- psignal(signal,"\nOtrzymalem sygnal");
- printf("Koniec mojej pracy...\n\n");
- kill(getpid(), SIGKILL);
- return;
- }
- void dlaMacierzystego(int signal){
- printf("\nMoj nr PID to: %d", getpid());
- printf(" : Numer sygnalu to: %d\n", signal);
- psignal(signal,"\nOtrzymalem sygnal");
- kill(pid1, SIGKILL);
- kill(pid2, SIGKILL);
- kill(getppid(), SIGKILL);
- printf("Koniec mojej pracy...\n\n");
- return;
- }
- void sygnalSIGILL(int signal){
- printf("\nMoj nr PID to: %d", getpid());
- printf(" : Numer sygnalu to: %d\n", signal);
- psignal(signal,"\nOtrzymalem sygnal");
- printf("Koniec mojej pracy...\n\n");
- kill(getppid(), SIGQUIT);
- return;
- }
- int main(void) {
- //PM
- int MPID = getpid();
- printf("Numer procesu macierzystego: %d\n", MPID);
- signal(SIGQUIT, dlaMacierzystego);
- if(fork()){
- if(fork()){
- }else{
- //P2
- pid2 = getpid();
- printf("Numer procesu nr 2: %d\n", getpid());
- int i;
- while(1){
- for(i=1;i<32;i++){
- switch(i){
- case SIGILL:
- signal(SIGILL, sygnalSIGILL);
- break;
- case SIGQUIT:
- signal(SIGQUIT, wyswietlSygnalQuit);
- break;
- default:
- signal(i, wyswietlSygnaly);
- break;
- }
- }
- }
- }
- }
- else{
- //P1
- pid1 = getpid();
- printf("Numer procesu nr 1: %d\n", getpid());
- signal(SIGQUIT, wyswietlSygnalQuit);
- while(1) {
- printf("$");
- fflush(stdout);
- sleep(1);
- }
- }
- pause();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement