Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
- Funkcja handler deklarująca w programie reakcje na poszczególne sygnały:
- void handler(int signal){
- printf("Otrzymałem sygnał: ");
- if(signal==14){
- printf("SIGALRM\n");
- printf("Program zostanie wyłączony\n");
- exit(1);
- }
- if(signal==15){
- printf("SIGTERM\n");
- printf("Program będzie kontynuował swoje działanie\n");
- }
- if(signal==10){
- printf("SIGUSR1\n");
- printf("Wtrzymanie odbierania sygnałów na 300 iteracji\n");
- flag = 1;
- }
- }
- Po otrzymaniu pierwszego sygnału (SIGALRM), program bezwarunkowo kończy się.
- Drugi sygnał (SIGTERM) nie wpływa na działanie programu poza wyświetleniem komunikatu.
- 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.
- Czwarty sygnał (SIGUSR2) ignorowany jest kompletnie przez cały czas działania programu. Nie wyświetlany jest jakikolwiek komunikat. Zrealizowane jest to poleceniem
- signal(SIGUSR2,SIG_IGN);
- wywołanym na samym początku funkcji main.
- 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:
- SigBlk: 0000000000000000
- SigIgn: 0000000000000800
- SigCgt: 0000000000006200
- Po przeliczeniu masek otrzymałem:
- SigBlk: 0000000000000000
- SigIgn: 0000100000000000
- SigCgt: 0110001000000000
- 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.
- 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