Advertisement
albert828

SCRl6 Sprawko

Nov 21st, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. 1. Przed dodaniem do programu polecenia sleep, bądź pochodnych ( w moim przypadku usleep), program zużywał prawie 100% zasobów procesora. Po dodaniu opóźnienia (rzędu 100ms) w pętli programu zużycie to znacząco zmalało.
  2. Funkcja handler deklarująca w programie reakcje na poszczególne sygnały:
  3. void handler(int signal){
  4. printf("Otrzymałem sygnał: ");
  5. if(signal==14){
  6. printf("SIGALRM\n");
  7. printf("Program zostanie wyłączony\n");
  8. exit(1);
  9. }
  10. if(signal==15){
  11. printf("SIGTERM\n");
  12. printf("Program będzie kontynuował swoje działanie\n");
  13. }
  14. if(signal==10){
  15. printf("SIGUSR1\n");
  16. printf("Wtrzymanie odbierania sygnałów na 300 iteracji\n");
  17. flag = 1;
  18. }
  19. }
  20. Po otrzymaniu pierwszego sygnału (SIGALRM), program bezwarunkowo kończy się.
  21. Drugi sygnał (SIGTERM) nie wpływa na działanie programu poza wyświetleniem komunikatu.
  22. Trzeci sygnał (SIGUSR1) wstrzymuje odbieranie wszystkich czterech sygnałów na 300 iteracji. Zrealizowane jest to przy użyciu ustawianej flagi, która sprawdzana jest w funkcji main po wywołaniu funkcji handler.
  23. Czwarty sygnał (SIGUSR2) ignorowany jest kompletnie przez cały czas działania programu. Nie wyświetlany jest jakikolwiek komunikat. Zrealizowane jest to poleceniem
  24. signal(SIGUSR2,SIG_IGN);
  25. wywołanym na samym początku funkcji main.
  26.  
  27. 2. Po uruchomieniu powyższego programu sprawdziłem zawartość pliku pseudo-systemu (/proc/[pid]/status), w którym znajdowały się informacji odnośnie sygnałów blokowanych, ignorowanych oraz przechwytywanych:
  28. SigBlk: 0000000000000000
  29. SigIgn: 0000000000000800
  30. SigCgt: 0000000000006200
  31. Po przeliczeniu masek otrzymałem:
  32. SigBlk: 0000000000000000
  33. SigIgn: 0000100000000000
  34. SigCgt: 0110001000000000
  35. Co w przypadku SIG_IGN odpowiada sygnałowi numer 12, a w przypadku SIG_CGT sygnałom numer: 10, 14, 15, co zgadza się w faktycznym kodem programu.
  36. Po uruchomieniu potoku złożonego z trzech poleceń jedyna informacja, jaką udało mi się uzyskać, to PPID procesów, co nie pozwala na jednoznaczne określenie w jakiej kolejności uruchamiane były polecenia w potoku.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement