Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<signal.h>
  4. #include<stdlib.h>
  5. int pid1;
  6. int pid2;
  7. int koniec;
  8. void sig_handler(int signal)
  9. {
  10. fprintf(stderr,"\nmoj numer pid to : %i otrzymalem sygnal numer: %i\n",getpid(),signal);
  11. return;
  12. }
  13. void zakoncz(int signal)
  14. {
  15. koniec = 1;
  16. return;
  17. }
  18. void sig_main(int signal)
  19. {
  20. kill(pid1,signal);
  21. kill(pid2,signal);
  22. printf("proces macierzysty konczy prace !\n");
  23. exit(0);
  24. }
  25. void sig_pid1(int signal)
  26. {
  27. kill(getppid(),23);
  28. }
  29. int main ()
  30. {
  31. koniec = 0;
  32. printf("\nNumer PID procesu macierzystego : %d\n",getpid());
  33. if(fork()==0)
  34. {
  35. pid1 = getpid();
  36. printf("Numer PID procesu potomnego nr1 : %d\n",pid1);
  37. for(int i = 0 ; i < 31 ; i++)
  38. {
  39. if( i!=23 && i != 24)
  40. signal(i,sig_handler);
  41. }
  42. signal(23,zakoncz);
  43. signal(24,sig_pid1);
  44. while(koniec == 0)
  45. {
  46. sleep(1);
  47. }
  48. printf("\nPotomek nr 1 z PID: %i konczy prace !\n",pid1);
  49. return 0;
  50. }
  51. if(fork()==0)
  52. {
  53. sigset_t mask;
  54. sigfillset(&mask);
  55. sigdelset(&mask,23);
  56. sigprocmask(SIG_BLOCK,&mask,NULL);
  57. signal(23,zakoncz);
  58. pid2 = getpid();
  59. printf("Numer PID procesu potomnego nr2 : %d\n",getpid());
  60. while (1)
  61. {
  62. for(int i = 0 ; i < 8 ; i++)
  63. {
  64. if(i%2==0)
  65. {
  66. printf("_");
  67. }
  68. else
  69. {
  70. printf("-");
  71. }
  72. sleep(1);
  73. fflush(stdout);
  74. if(koniec == 1)
  75. {
  76. printf("\nPotomek nr 2 z PID: %i konczy prace !\n",pid2);
  77. exit(0);
  78. }
  79. }
  80. printf("\n");
  81. }
  82. return 0;
  83. }
  84. sigset_t maska;
  85. sigfillset(&maska);
  86. sigdelset(&maska,23);
  87. sigprocmask(SIG_BLOCK,&maska,NULL);
  88. signal(23,sig_main);
  89. while(1);
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement