![]() |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
Řetězec | Reakce na vybraný signál |
"IGNORE" | obdržený signál se ignoruje |
"DEFAULT" | nastavuje zpět implicitní reakci na signál |
Na závěr poznamenejme, že některé signály zachytit nelze (KILL, STOP).
Funkce kill posílá signál danému procesu. kill přijímá 2 parametry - číslo nebo jméno signálu a seznam procesů, kterým se tento signál má poslat.
Podívejme se na několik ukázkových příkazů. Protože máme k dispozici proměnnou $$, která uchovává ID procesu, se kterým program běží, názorným příkladem může být sebevražda programu. Pošleme našemu programu signál KILL.
kill "KILL", $$;
Jak je patrné z výstupu programu, který nám vypsal seznam signálů, KILL má číslo 9. Tudíž stejný smysl bude mít tento příkaz.
kill 9, $$;
Často je u příkazu kill vidět, že se čárka nahrazuje šipkou =>, která má stejný význam.
kill "KILL" => $$;
Funkce getppid vrací PID rodičovského procesu. Tímto způsobem zabijeme shell.
kill "KILL" => getppid;
Upozorněme také návratovou hodnotu funkce kill. V případě, že se signál podařilo poslat, vrací funkce pravdivou hodnotu, v opačném případě nepravdivou. Příčinou toho může být například to, že nemáme dostatečná práva nebo prostě proces neexistuje - důvod pak už snadno zjistíme z proměnné $!. Dále v této souvislosti ještě zmiňme signál ZERO, který nedělá nic. Právě pomocí něj lze snadno testovat, zda nějaký proces existuje.
print "proces vypadá mrtvě ($!)" unless kill "ZERO" => 5032;
Modul sigtrap nabízí speciální rozhraní pro práci se signály. Zavádí se tímto způsobem.
use sigtrap qw(ovladač seznam_signálů);
Vše je o tom, že na signály ze seznamu signálů je aplikován ovladač, který určuje, jak na ně zareagovat. Proto jen stručně. Jako ovladač může být uveden jeden z následujících. V posledním případě je vlastní_ovladač cokoliv, co by šlo přiřadit jako hodnota do prvku hashe %SIG.
Seznam signálů je prostě seznam signálů. Lze ale používat i některé speciální hodnoty:
Není-li uveden seznam signálů, je automaticky použito old-interface-signals.
Budou následovat příklady programů, které zachytávají různé signály. K testovacím účelům bude vhodné programům posílat signály příkazem kill -SIGNÁL číslo_procesu. Například
$ kill -INT 10538
K zjištění PID programu bude nejjednodušší přímo do programu připsat tento řádek.
print "Číslo procesu: $$\n";
Program s následujícím řádkem reaguje na signály INT a TERM tak, že se ukončí.
use sigtrap qw(die INT TERM);
To samé, jen pro signály normal-signals - tedy INT, HUP, PIPE, TERM, platí pro tento řádek.
use sigtrap qw(die normal-signals);
Nakonec zachytíme signály INT, HUP, PIPE, TERM a to tak, že při obdržení některého z těchto signálů bude vypsán jeho název pomocí námi napsaného podprogramu.
use sigtrap "handler", \&signal, "normal-signals";
print "Číslo procesu: $$\n";#abychom věděli, kam posílat zkušební signály
<> while 1;
sub signal {
my($signal) = @_;
print "Zachycen SIG$signal!\n";
}
Z příkladů by mělo být jasné, jak zachytávání pomocí sigtrap funguje.
|
||
KOMENTARZE
Nie ma komentarzy dla tej pozycji. |
||
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
1. |
Pacman linux Download: 5004x |
2. |
FreeBSD Download: 9214x |
3. |
PCLinuxOS-2010 Download: 8700x |
4. |
alcolix Download: 11096x |
5. |
Onebase Linux Download: 9809x |
6. |
Novell Linux Desktop Download: 0x |
7. |
KateOS Download: 6372x |
1. |
xinetd Download: 2535x |
2. |
RDGS Download: 937x |
3. |
spkg Download: 5040x |
4. |
LinPacker Download: 10209x |
5. |
VFU File Manager Download: 3311x |
6. |
LeftHand Mała Księgowość Download: 7340x |
7. |
MISU pyFotoResize Download: 2973x |
8. |
Lefthand CRM Download: 3673x |
9. |
MetadataExtractor Download: 0x |
10. |
RCP100 Download: 3270x |
11. |
Predaj softveru Download: 0x |
12. |
MSH Free Autoresponder Download: 0x |