Přihlásit | Registrovat

Signály pro procesy

Signály jsou požadavky na přerušení procesu. Mohou si je posílat procesy navzájem, může je procesu poslat řídící terminál, správce systému nebo jádro.

Každý proces má definované postupy na zpracování zachycených signálů. Pokud proces nereaguje správně, jádro provede podle typu signálu příslušnou akci. V případě některých signálů se také vytváří soubor core, což je obraz paměti daného procesu a tyto informace lze použít pro ladění.

kill

Signály může správce (root) nebo vlastník procesu poslat pomocí příkazu kill. V příkazovém řádku napíše:

kill -s číslo_signálu PID_procesu

a signál bude odeslán.

killall

Obdobně pracuje příkaz příkaz killall, který však nepracuje s PID procesu, ale se jménem a umí „zabít“ všechny procesy stejného jména najednou.

Běh programu na pozadí a na popředí

Pokud spustíte v terminálu příkaz, jehož vykonání trvá déle, nemůžete systému zadávat další příkazy (můžete se ovšem např. přepnout do jiného terminálu). Program lze ale například spustit na pozadí přímo při zadávání příkazu, takže terminál nečeká na jeho ukončení, a je vám okamžitě znovu k dispozici. Typicky se to hodí např. u tisku:

bash-3.2$ lpr soubortxt &
[1] 6935

Znak ampersand (&) za příkazem řekne shellu, aby spustil příkaz na pozadí. Shell zobrazí číslo úlohy a její PID. Přestože tisk stále probíhá, okno terminálu zobrazí výzvu a očekává další příkazy. V opačném případě zůstane zablokované do skončení tisku. \ Po ukončení tisku vyskočí informační hlášení:

[1]+ Done lpr soubortxt

V jiném případě spustíte program, a teprve pak si uvědomíte, že by bylo lepší, aby běžel na pozadí. Zařídí to příkazy pro pozastavení a opětovné spuštění programu:

pozastaví běh programu: Ctrl+z
obnoví běh na pozadí: bg
obnoví běh na popředí: fg

Pokud máte v shellu spuštěno již více úloh, je zapotřebí za příkaz přidat číslo úlohy, které se má příkaz týkat. Čísla úloh vám vypíše např. příkaz jobs.
Pozn.: Číslo úlohy a PID není totéž. PID je číslo úlohy přiřazované úloze jádrem. Číslo úlohy je číslo, které úloze přiděluje shell, takže v nově otevřeném shellu (jedno jestli terminál či Konzole) bude mít nově spuštěná úloha číslo 1, přestože PID může být 125486.

Příkazy z klávesnice přebírá jen úloha na popředí, takže pokud chcete předat příkaz úloze na pozadí, musíte jí dostat zpět na popředí:

fg číslo_úlohy
v našem příkladu:

fg 1

Nemáte-li spuštěno více uloh, můžete číslo úlohy vynechat.
Pozn.:Výstupy (standardní i chybový) úloh na pozadí je nutné vhodně přesměrovat, aby nekolidovaly s úlohou běžící na popředí.

Mandriva Wiki
system/prikazovy_radek/signaly.txt · Poslední úprava: 2011/01/05 18:00 autor: yullaw