@@ -7,23 +7,23 @@ Vlastně, jak si ukážeme, na signál zareagovat *musí*.
77Signály jsou docela minimalistické: obsahují jen jedno malé číslo,
88druh signálu.
99Větší „zprávy“ se musí procesům posílat jiným způsobem (třeba souborem,
10- rourou nebo přes síť), ale i v těchto případech se dá signálem upozornit
10+ rourou nebo přes síť), ale i v těchto případech se dá signálem upozornit,
1111že si proces má nějakou větší zprávu přečíst.
1212Typickým příkladem je ukončení probíhajícího procesu pomocí ` Ctrl+C ` , kdy
1313pošleme procesu signál žádající o jeho ukončení.
1414
1515
1616## Přijetí signálu
1717
18- Když procesu pošleš signál, tak ten proces * přeruší* to co zrovna dělá
18+ Když procesu pošleš signál, tak ten proces * přeruší* to, co zrovna dělá,
1919a signál zpracuje.
20- Co přesně se stane závisí na druhu signálu; možnosti jsou tyto:
20+ Co přesně se stane, závisí na druhu signálu; možnosti jsou tyto:
2121
2222* Ukončení (angl. * terminate* ): proces se ukončí.
2323* Ignorování (angl. * ignore* ): nic se nestane.
2424* Ukončení s chybou (angl. * core dump* ): proces se ukončí. Pokud je na to
2525 systém nastaven, stav paměti ukončeného procesu se zapíše do speciálního
26- souboru, aby bylo jednodušší zjistit co se v momentě ukončení zrovna dělo.
26+ souboru, aby bylo jednodušší zjistit, co se v momentě ukončení zrovna dělo.
2727* Pozastavení (angl. * stop* ): Proces se pozastaví.
2828 V shellu tohle dělá zkratka <kbd >Ctrl</kbd >+<kbd >Z</kbd >
2929* Obnovení (angl. * continue* ): Pozastavený proces se znovu spustí.
@@ -62,7 +62,7 @@ Přepínačem pojmenovaným podle signálu můžeš vybrat, který signál pošl
6262
6363Zkus si to!
6464
65- V jedom terminálu zadej:
65+ V jednom terminálu zadej:
6666
6767``` console
6868$ sleep 1000
@@ -71,12 +71,12 @@ $ sleep 1000
7171A ve druhém třeba:
7272
7373``` console
74- $ ls -a | grep sleep
74+ $ ps -a | grep sleep
7575 12345678 pts/3 00:00:00 sleep
7676$ kill -SIGABRT 12345678
7777```
7878
79- Signál ` SIGABRT ` proces dostane když se snaží provést neplatnou operaci –
79+ Signál ` SIGABRT ` proces dostane, když se snaží provést neplatnou operaci –
8080instrukci, které procesor nerozumí.
8181To je většinou hodně závažná chyba.
8282Kdybys při instalaci systému zadal{{a}} „automatické hlášení chyb“,
@@ -87,13 +87,13 @@ pomocí `abrt-cli list` podívat, že chyba byla zaznamenána.
8787
8888Podobně si můžeš vyzkoušet jiné signály, třeba:
8989
90- * ` SIGINT ` se posílá když zmáčkneš <kbd >Ctrl</kbd >+<kbd >C</kbd >.
91- * ` SIGTERM ` posílá ` kill ` když mu nezadáš jiný signál.
92- * ` SIGKILL ` (9) se posílá když zmáčkneš <kbd >Ctrl</kbd >+<kbd >\\ </kbd >;
90+ * ` SIGINT ` se posílá, když zmáčkneš <kbd >Ctrl</kbd >+<kbd >C</kbd >.
91+ * ` SIGTERM ` posílá ` kill ` , když mu nezadáš jiný signál.
92+ * ` SIGKILL ` (9) se posílá, když zmáčkneš <kbd >Ctrl</kbd >+<kbd >\\ </kbd >;
9393 proces se „natvrdo“ ukončí.
9494 U tohoto signálu si procesy nemůžou nastavit jiné chování:
9595 proces se vždy ukončí.
96- * ` SIGSTOP ` se posílá když zmáčkneš <kbd >Ctrl</kbd >+<kbd >z</kbd >;
96+ * ` SIGSTOP ` se posílá, když zmáčkneš <kbd >Ctrl</kbd >+<kbd >z</kbd >;
9797 proces se pozastaví.
9898 Podobně jako u ` SIGKILL ` si i u tohoto signálu procesy nemůžou nastavit
9999 jiné chování.
@@ -102,12 +102,12 @@ Podobně si můžeš vyzkoušet jiné signály, třeba:
102102
103103## Signály v Pythonu
104104
105- To, že se přijetí signálu přeruší cokoli co proces zrovna dělá,
105+ To, že se přijetím signálu přeruší cokoli, co proces zrovna dělá,
106106se dá přirovnat k výjimkám v Pythonu.
107107Koneckonců, výjimka ` KeyboardInterrupt ` je jen reakce Pythonu na signál
108- ` SIGINT ` : vzniká tak, že so Python na ` SIGINT ` připravil: řekl operačnímu
109- systému že pro ` SIGINT ` nemá ukončit proces,
110- ale má se zavolat funkce která způsobí výjimku.
108+ ` SIGINT ` : vzniká tak, že se Python na ` SIGINT ` připravil: řekl operačnímu
109+ systému, že pro ` SIGINT ` nemá ukončit proces,
110+ ale má se zavolat funkce, která způsobí výjimku.
111111
112112Program v Pythonu můžeš „připravit“ na výjimky pomocí ` try ` a ` except ` .
113113Na to, aby se program připravil na přijetí signálu, slouží funkce
@@ -135,4 +135,4 @@ Tento program reaguje na `SIGUSR1` a `SIGUSR2`, tedy např. `kill -SIGUSR1 $pid`
135135
136136Můžeš si ověřit, že pro ` SIGKILL ` a ` SIGSTOP ` funkce ` signal.signal ` selže.
137137A taky že předefinování ` SIGINT ` přenastaví chování
138- <kbd >Ctrl</kbd >+<kbd >C</kbd > – právě pro takové situace se hodí ` SIGKILL ` .
138+ <kbd >Ctrl</kbd >+<kbd >C</kbd > – právě pro takové situace se hodí ` SIGKILL ` .
0 commit comments