You are on page 1of 31

Python modul signal

Operacijski sustavi
Studij: Sveučilišni prijediplomski studij Informatika
Asistent: Doc. dr. sc. Vanja Slavuj
Sadržaj nastavne cjeline

• Uvod
• definicija i uloga signala
• slanje signala
• Modul signal
• opis namjene modula signal i njegova dokumentacija
• primanje i obrada signala
• ignoriranje signala i zadani način obrade signala
• alarmi

Operacijski sustavi 2
Cilj nastavne cjeline

Cilj nastavne cjeline je upoznati studente s osnovnim načelima


rada sa signalima operacijskog sustava koristeći dostupna
programska sučelja.

Operacijski sustavi 3
Ishodi učenja

• Nakon uspješno savladane cjeline, studenti će moći:


• najaviti modul signal programskog jezika Python u vlastitim
programima u kojima je potrebno upravljati obradom signala
• interpretirati službenu dokumentaciju modula signal programskog
jezika Python
• odabrati i proslijediti signal procesu obzirom na učinak signala i cilj
programa
• koristiti funkcije modula signal programskog jezika Python za
primanje, obradu i ignoriranje signala u operacijskom sustavu
• izraditi vlastiti program u kojem se primjenjuju odabrane funkcije za
rad sa signalima

Operacijski sustavi 4
Uvod
Signali i njihova uloga

• Signali predstavljaju način slanja obavijesti programima OS-a o


određenom događaju u sustavu
• najčešće se obrađuju asinkrono (obzirom na uobičajeno izvođenje
programa)
• često se nazivaju i programskim prekidima jer prekidaju uobičajeno
izvođenje programa
• može ih generirati sam sustav ili pojedini program
• Svaki je signal definiran jedinstvenim:
• cjelobrojnim identifikatorom (npr., 2)
• nazivom (npr., INTERRUPT)

Operacijski sustavi 6
Popis signala

• Popis signala u bash-u dostupan je naredbom kill -l

Operacijski sustavi 7
Ponašanje procesa nakon primitka
signala
• Nakon primitka signala, proces može:
• zaustaviti izvođenje
• nastaviti izvođenje
• prekinuti izvođenje
• prekinuti izvođenje uz stvaranje tzv. core dump datoteke sa stanjem
memorije u trenutku prekida
• ignorirati (zanemariti) signal
• Obrada signala po pristizanju zapravo ovisi o načinu na koji je
programer napisao skriptu koja implementira obradu signala

Operacijski sustavi 8
Slanje signala (korisnički pristup)

9
Operacijski sustavi
Slanje signala (programski pristup)

10
Operacijski sustavi
Modul signal
Modul signal

• Modul signal programskog jezika Python nudi


mehanizme za primjenu obrade signala
• Sastoji se uglavnom od:
• varijabli za određivanje načina obrade signala tj. upravljača (engl.
handler)
• varijabli za definiranje signala
• funkcija za registriranje upravljača koji određuje obradu
(izvođenje) signala po njegovu pristizanju
• funkcija za višedretveni rad sa signalima

Operacijski sustavi 12
Dokumentacija modula signal

• Dokumentaciju modula signal možete pronaći pod


naslovom „Set handlers for asynchronous events”
• dokumentacija je dostupna i na službenim mrežnim stranicama
sintaksa

opis funkcionalnosti / vrijednosti koje funkcija vraća

podatak o dostupnosti obzirom na verziju Pythona

Operacijski sustavi 13
Najava modula signal

• Kao i preostale module koji nisu uključeni u jezgru


programskog jezika Python, modul signal potrebno je
najaviti
import signal

14
Operacijski sustavi
Primanje i obrada signala

• Hvatanje signala i njegova obrada moguća je definiranjem upravljača


• to je tzv. callback funkcija (funkcija koja se prosljeđuje nekoj drugoj funkciji
kao argument i koja se zatim poziva u toj vanjskoj funkciji kako bi izvršila
neku zadaću)
• upravljač je funkcija koja se poziva kada procesu (skripti) pristigne određeni
signal
• upravljač je potrebno najprije najaviti tj. registrirati funkcijom
.signal(varijabla_signala, naziv_upravljaca)
• Dva su argumenta upravljača:
1. cjelobrojni identifikator signala
2. stanje stoga od trenutka kada je izvođenje programa prekinuto signalom

Operacijski sustavi 15
Primjer (1) – definiranje upravljača

• Zadatak uz primjer: Napiši program koji na zaslon ispisuje vlastiti PID, a zatim uz
odgovarajuću poruku koja se prikazuje svakih 10 sekundi, čeka pristizanje signala
SIGUSR1 ili SIGHUP (kojeg će mu poslati korisnik iz drugog terminala). Kada
jedan od navedenih signala stigne do programa, na zaslon se ispisuje poruka o
pristizanju signala s odgovarajućim brojem, a program nastavlja čekati nove
signale.

Operacijski sustavi 16
Rješenje primjera (1)

17
Operacijski sustavi
Rješenje primjera (1)

18
Operacijski sustavi
Funkcije za rad s upravljačem

• Modul signal nudi funkcije za rad s upravljačem, među


kojima su i:
• signal.pause() – proces čeka na dolazak signala
• signal.getsignal(sig) – vraća naziv upravljača
povezanog sa signalom čiji je identifikator sig
• signal.strsignal(sig) – vraća puni naziv signala čiji je
identifikator sig (koristi se od verzije Pythona 3.8)
• signal.valid_signals() – vraća popis signala koji su
definirani u OS-u (koristi se od verzije Pythona 3.8)

Operacijski sustavi 19
Primjer (2) – prilagodba ranijeg
programa

20
Operacijski sustavi
Primjer (3) – provjera upravljača

• Zadatak uz primjer: Napiši program koji uz odgovarajuću poruku korisniku čeka


pristizanje jednog od prvih 5 definiranih signala sustava (kojeg će mu poslati
korisnik iz drugog terminala). Program nudi korisniku mogućnost provjere je li za
uneseni cjelobrojni identifikator signala definiran upravljač i o tome obavještava
korisnika.

Operacijski sustavi 21
Rješenje primjera (3)

22
Operacijski sustavi
Načini obrade signala

• Po pristizanju signala procesu, signal je moguće:


• obraditi upravljačem (prikazano)
• ignorirati
• obraditi tako da on izvršava zadanu (engl. default) zadaću
• Pythonov modul signal nudi odgovarajuće funkcije za
posljednja dva slučaja:
• .SIG_IGN – pristigli se signal ignorira
• .SIG_DFL – pristigli signal obrađuje se prema zadanim
postavkama

Operacijski sustavi 23
Primjer (4) – načini obrade signala

• Zadatak uz primjer: Napiši program koji na zaslon ispisuje vlastiti PID i čeka
pristizanje signala SIGHUP, SIGINT ili SIGTERM (kojeg će mu poslati korisnik iz
drugog terminala). Za pristigli signal HUP, program na zaslon ispisuje poruku o
pristiglom broju signala i prekida svoje izvršavanje. Za pristigli signal INT, program
ga ignorira i nastavlja čekati novi signal. Za pristigli signal TERM, program se
ponaša onako kako je zadano tim signalom.

Operacijski sustavi 24
Rješenje primjera (4)

25
Operacijski sustavi
Obrada signala – uputa

• Rad sa signalima trebao bi slijediti pravila POSIX standarda


• svaki pristigli signal program mora obraditi na primjeren način
• za svaki signal potrebno je definirati odgovarajući upravljač
ovisno o tome koja je zadaća (učinak) signala
• programi koji zaprime signale SIGHUP, SIGINT, SIGKILL ili
SIGTERM, trebali bi završiti svoje izvođenje, a u svakom drugom
slučaju, uz završavanje, trebalo bi stvoriti i core dump datoteku sa
zapisom trenutnog stanja memorije (drugi argument koji se
prosljeđuje upravljaču)

Operacijski sustavi 26
Alarmi

• Alarmi su posebna vrsta signala


• program traži od OS-a obavijest da je prošao određeni vremenski
period
• signal.alarm(time) – funkcija koja zahtjeva slanje signala
SIGALRM nekom procesu nakon time sekundi
• signal.SIGALRM – varijabla koja definira signal za mjerenje
vremena (engl. timer)

Operacijski sustavi 27
Primjer (5) – alarmi

• Zadatak uz primjer: Izmijeni programski kod rješenja prethodnog zadatka na


sljedeći način: ako korisnik ne pošalje signal unutar 15 sekundi, programu se
automatski šalje alarm; po aktivaciji alarma, program na zaslon ispusuje trenutno
vrijeme i poruku o neaktivnosti te završava izvođenje.

Operacijski sustavi 28
Rješenje primjera (5)

29
Operacijski sustavi
Zadatci za ponavljanje
1. Napiši program koji hvata signal SIGKILL, čeka na pristizanje signala, te po
pristizanju signala KILL na zaslon ispisuje poruku o identifikatoru signala i završava
izvođenje. Što se događa? Zbog čega?
2. Napiši program koji nakon pokretanja na zaslon ispisuje poruku „Proces-roditelj
započinje”, stvara proces-dijete i čeka na njegov dovršetak. Proces-dijete započinje
izvođenje uz odgovarajući poruku i PID na zaslonu te nudi korisniku unos opcije ‘A’ za
zaustavljanje njegova izvođenja (signal SIGTSTP) ili ‘B’ za završavanje izvođenja
(signal SIGTERM) uz zapis stoga u datoteku backup_stog.txt. U slučaju
zaustavljanja procesa-djeteta, postavlja se alarm od 15 sekundi (koji se pokreće
jednom kada se iz drugog terminala signalom nastavi njegovo izvođenje), a proces-
dijete osluškuje signale. Kada alarm stigne, program radi isto što i opcijom ‘B’ ranijeg
izbornika. Kada proces-dijete završi svoje izvođenje, proces roditelj završava
izvođenje (uz odgovarajuću poruku).

Operacijski sustavi 30
Literatura

1. Budin, L., Brođanac, P., Markučić, Z. & Perić, S. (2012). Rješavanje problema
programiranjem u Pythonu. Zagreb: Element.
2. Hellmann, D. (2011). The Python standard library by example. Upper Saddle River, NJ:
Addison-Wesley.
3. Hofmann, F. (nd). Handling Unix signals in Python. Stack Abuse.
https://stackabuse.com/handling-unix-signals-in-python/
4. Python Software Foundation. (2020, May 2). The Python Standard Library.
https://docs.python.org/3/library/index.html
5. van Rossum, G. & Drake, F. L. (2011). Python language reference manual (Revised and
updated for Python 3.2). Bristol: Network Theory Ltd.

Operacijski sustavi 31

You might also like