Obsah
Príkazy pre prácu s procesmi
pstree
Unixový príkaz, ktorý vypíše zoznam spustených procesov v stromovej štruktúre. Pekne nadväzne ukáže, ktorý proces bol spustený cez ktorý proces a takisto sa dá zistiť, ktorý v poradí bol spustený.
Pre základné spustenie programu stačí napísať iba pstree
, je možné ale použiť aj prepínače.
pstree
Prepínače
-?
nápoveda-a
zobrazí argumenty príkazového riadku-c
kompaktné zobrazenie-h
zvýraznenie aktuálneho procesu a jeho predkov-H
PID zvýrazniť tento proces a jeho predkov-G
použit znaky čiar pre VT100-l
neskracovať dlhé čiary-U
použiť unicode znaky čiarPID
začať od tohto procesu, štandardne začína od 1 (init)USER
zobraziť iba procesy začinajúce od tohto užívateľa
Napríklad, pre zobrazenie všetkých procesov od jedného užívateľa, a ich nadväznosť na ďalšie (ak jeden proces spúšťa ďalšie procesy), použijeme zápis pstree menouzivatela
. Výsledok potom môže vyzerať ako tu nižšie napísaný.
majster@server:~$ pstree majster bonobo-activati───{bonobo-activat} clock-applet dbus-daemon dbus-launch gnome-session─┬─bluetooth-apple ├─compiz───sh───gtk-window-deco ├─evolution-alarm───{evolution-alar} ├─gdu-notificatio ├─gnome-panel ├─gnome-power-man ├─ica-launcher─┬─avahi-publish-s │ └─ica─┬─ica │ └─2*[{ica}] ├─nautilus───{nautilus} ├─nm-applet ├─polkit-gnome-au ├─python ├─ssh-agent ├─update-notifier └─{gnome-session}
top
Pre monitorovanie práve bežiacich procesov a podprocesov v unixových systémoch používame nástroj top
. Na rozdiel od iných nástrojov, ako je napríklad príkaz ps
, jeho použitie nie je dávkové ale priebehové. To znamená, že program beží až kým ho nevypneme stlačením klávesy Q
, nie ako väčšina príkazov, ktoré vypíšu dávku informácií a samé sa ukončia. Základné spustenie príkazu:
top
Príkaz po svojom spustení zobrazuje v záhlaví pod označením load averages to isté, ako príkaz uptime
. O riadok nižšie sa zobrazí súhrn procesov, stav CPU, využitie pamäte a swap. Štandardne sa zobrazujú informácie ako PID (Process ID), meno uživateľa pod ktorým daný proces beží, priorita, nice, veľkosti v operačnej pamäti, aktuálny stav procesu, zaťaženie procesova v percentách, obsadená pamäť v percentách, čas behu procesu (merané v čase zaťaženia procesora), a nakoniec príkaz, ktorým bol proces spustený. Samozrejme, je možné zobraziť príkaz aj spolu s parametrami, s ktorými bol volaný.
top - 12:35:41 up 4 min, 2 users, load average: 0.22, 0.76, 0.40 Tasks: 89 total, 1 running, 88 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si Mem: 504280k total, 192940k used, 311340k free, 17288k buffers Swap: 522236k total, 0k used, 522236k free, 82720k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1215 majo 20 0 19352 1268 944 R 0.3 0.3 0:00.05 top 1 root 20 0 23996 2128 1324 S 0.0 0.4 0:01.31 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.45 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kworker/0:0 5 root 20 0 0 0 0 S 0.0 0.0 0:00.72 kworker/u:0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 sync_supers 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default 12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kacpid 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kacpi_notif 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kacpi_hotpl 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
ps
Vo väčšine unixových systémoch príkaz ps (process status) zobrazuje bežiace procesy. Je príbuzný príkazu pstree
ale aj top
. Pri nezadaní žiadných parametrov príkaz top
vypíše nasledujúce informácie:
user@server:~$ ps PID TTY TIME CMD 1118 pts/0 00:00:01 bash 1260 pts/0 00:00:00 ps
Medzi parametre príkazu ps patria:
-A -e
všetky procesy-f
plný výpis-u
užívateľský orientovaný formát-l
dlhý formát-v
formát virtuálnej pamäte
Najčastejšie budete pri svojej práci používať kombináciu dvoch parametrov. Jednak bude nevyhnutné vypisovať užívateľský orientovaný formát a vo väčšine prípadov aj všetky procesy. Sú dve kombinácie, ktoré vyhovujú požadovanému výberu. Obe si ich ukážeme napísane pod sebou, samozrejme, vy budete používať iba jednu z nich, ktorá Vám viac vyhovuje. Vyskúšajte si ale obe.
ps -au ps -ef
Pri vypisovaní dlhého formátu sa často stáva, že výpis na obrazovke je oveľa dlhší ako je výška obrazovky. Tá štandardne obsahuje 25 znakov (z hora dole) a pri používaní vzdialeného terminálu, môže obsahovať aj cez 50 a viac. Ale ak sa Vám zobrazí cez 200 riadkov, nie je to žiadna zábava. Preto sa naučíme kombinovať príkaz ps s ďalšími dvoma príkazmi.
Najprv si ukážeme ako zastaviť vypisovanie textu na obrazovku, po jej zaplnení. Výpis z jedného príkazu (ps
) použijeme ako vstup do druhého programu (more
), to sa realizuje pomocou zvislej čiary (|
). Takémuto prepojeniu procesy do reťazca sa hovorí rúra (pipeline
).
ps -au | more
Jednoduchšie je použiť príkaz, ktorý nám odfiltruje iba tie riadky, ktoré obsahuju požadované slovo. Napríklad ak hľadáme nejaký proces podľa mena programu.
ps -au | grep login
kill
V mnohých unixových systémoch sa používa príkaz kill
na poslanie rôzných signálov procesom. Napríklad umožňuje poslať príkaz kill
na ukončenie procesu.
kill PID
Príkaz kill
potrebuje minimálne jeden parameter, a to je Process ID (PID), ktorému bez ďalších parametrov pošle SIGKILL
.
Číslo | Názov | Názov | Popis |
---|---|---|---|
1 | HUP | Hangup | Tento signál sa posiela procesu, ak je jeho terminál uzavretý |
2 | INT | Interrupt | Prerušenie procesu cez klávesnicu, ak užívateľ stlačí CTRL+C |
3 | QUIT | Quit | Proces sa ukončí a zapiše stav pamäte s ktorou pracoval (core dump) |
4 | ILL | Illegal instruction | Tento signál odosiela operačný systém procesu, ktorý vykonal neznámu funkciu |
8 | FPE | Floating point exception | Signál sa pošle programu, ktorý sa snaží deliť nulou |
9 | KILL | Kill | „Zabitie“ procesu okamžite. Násilne ukončenie pri nečinnosti, tento signál sa neda obísť |
10 | USR1 | User-defined | Užívateľský definovaný signál |
11 | SEGV | Segmentation fault | Posiela sa signálom, ktoré nesprávne pracujú s pamäťou |
15 | TERM | Terminate | Ukončenie procesu |
18 | CONT | Continue | Pokračovanie procesu, ktorý obdržal niektorý z nasledujúcich dvoch signálov (19, 20) |
19 | STOP | Stop | Zastavenie procesu, nedá sa mu vyhnúť |
20 | TSTP | Terminal stop | Zastavenie procesu, dá sa mu vyhnúť. Tento signál obrdží proces, ktorý beži interaktívne a počas jeho behu stlačíte CTRL+Z |
Toto bol iba stručný zoznam základných signálov. Všetky signály začínajú reťazcom SIG
, teda signál KILL
sa posiela ako SIGKILL
Pokiaľ chcete vedieť, ktoré signály podporuje vaša distribúcia, Vypíšete si ich príkazom:
kill -l
Povedzme, že chceme „zabiť“ proces s číslom PID 3145, môžeme to spraviť jedným z nasledujúcich príkazov:
kill -9 3145 kill -s KILL 3145 kill -KILL 3145
Podobne si ešte ukážeme akými spôsobmi môžeme ukončiť proces s PID 3145:
kill 3145 kill -15 3145 kill -s TERM 3145 kill -TERM 3145
killall
Pre ukončenie všetkých procesov, ktoré majú rovnaké meno (sú jeden program) sa používa v unixových systémoch príkaz killall
. Rozdiel medzi príkazmi kill
a killall
je v tom, že príkaz kill
na identifikáciu používa PID procesu, preto dokáže obslúžiť iba jeden proces. Zato killall
používa na identifikáciu meno procesu, preto obslúži všetky procesy s rovnakým menom.
killall -9 mc
Príklad hore „zabije“ všetky procesy s názvom mc
. Všetkým procesom s názvom mc pošle signal SIGKILL
. Pre poslanie iného signálu, napríklad SIGTERM
pre všetky procesy s názvom bash
, zadáme do príkazového riadku:
killall -TERM bash
nice
nice
je unixový príkaz, ktorý je mapovaný priamo na volanie jádra Linuxu s rovnakým názvom. Jeho úlohou je spúštanie iného príkazu so zmenenou prioritou, teda inou ako je základná priorita. Tento príkaz sa prvý krát objavil v AT&T UNIXu verzie 6. Tento príkaz odpovedá štandardu POSIX (IEEE Std 1003.1-2004).
Iné príkazy sa spúštajú pomocou zmeny časovej priority. Ak je zadaná hodnota inkrementu, je použitá, ak nie je zadaná, použije sa štandardná hodnota 10. Užívateľ root
, môže spustiť proces s najvyššou prioritou pomocou použitia negatívneho inkrementu. Jeho hodnota sa môže meniť v rozsahu od -20 (najvyššia) až po 19 (najnižšia). Áno, záporná hodnota je najvyššia.
nice [-priorita] <prikaz> [argumenty_prikazu]
Predchadzajúci základný zápis príkazu hovorí o tom, ako spúštať príkaz nice. Okrem názvu príkazu (nice) musíme použiť aj príkaz, ktorý chceme zapnúť. Voliteľné položky sú priorita (inkrement) a argumenty pre príkaz, ktorý spúšťame cez príkaz nice.
Návratové hodnoty príkazu:
0
príkaz sa bezchybne vykonal1–125
chybový stav126
program sa našiel, ale nemohol sa vykonať127
program sa nenašiel
Príklad pre spustenie príkazu l3enc
na prekódovanie WAV súboru do MP3 s najvyššou prioritou:
nice -20 l3enc mojapesnicka.wav mojapesnicka.mp3
renice
Na veľmi podobnom princípe ako nice
pracuje aj príkaz renice
. Zatiaľ čo nice
sa používa na spúštanie nových príkazov, renice
mení prioritu už bežiacim procesom.
renice <priorita> <PID>
Pri používaní príkazu renice
musíme zadávať minimálne dva parametre. Jednak novú prioritu a potom aj číslo procesu, ktorému chceme prioritu zmeniť. Napríklad pre zmenu priority na +5 pre proces číslo 987
zadáme príkaz:
renice +5 987
Pre zmenu priority pre všetky procesy jedného užívateľa použijeme navyše prepínač -u
nasledovaný menom užívateľa. Pre maximálnu prioritu všetkých procesov užívateľa root
použijeme:
renice -20 -u root
Zmena priority pre všetky procesy konkrétneho užívateľa nie je jediná môžnosť ako meniť prioritu pre viac procesov. Druhá z možnosti je zmeniť prioritu pre všetky procesy užívateľov, v konkrétnej skupine. Pre zníženie priority všetkých procesov užívateľov v skupine users
na najnižšiu použijeme zápis príkazu:
renice +19 -g users
at
Pre naplánované odložené spúštanie príkazov (skriptov) slúži program označovaný ako at
. Štandardne sa používa spustením príkazu s hodnotou času, prípadne aj dátumu, kedy sa má príkaz spustit. Po spustení príkazu s nadefinovaným časom pokračuje druhá časť, zadávanie príkazov do jednotlivých riadkov. Pre ukončenie vstupu, zadávania príkazov, slúži kombinácia kláves CTRL+D
.
at time
Povedzme, že chceme naplánovať spustenie jedného príkazu ls -al /bin
o 10:23 , postupujeme takto:
user@server:~$ at 10:23 at> ls -al /bin at>
Zadávanie príkazov ukončíme stlačením CTRL+D
.
Ak už máme pripravený skript, ktorý chceme spustiť, teda nechceme zadávať ručne príkazy ako v predošlom príklade, použijeme parameter -f skript
, kde skript
je názov a prípadne aj cesta k umiestneniu nášho skriptu. Ako skript je v príklade dole uvedené budik.sh
, ktorý sme naplánovali na 6:30.
at -f budik.sh 6:30
Zápis času spustenia skriptu budik.sh
môže byť oveľa bohatší. Napríklad o 4 dni v čase 14:00:
at -f budik.sh 4pm + 3 days
atq
Zoznam načasovaných úloh zobrazíme príkazom atq
.
user@server:~$ atq 5 Sun Feb 19 18:00:00 2012 6 Sat Feb 18 18:03:00 2012
Ten istý výpis ako pri atq
dostaneme pri použití prepínača -l
v príkaze at
. V prípade použitia prepínača -v
v príkaze atq
, získame tiež zoznam už ukončených úloh.
atrm
Na zmazanie úloh sa používa príkaz atrm
. Pomocou príkazov atq
alebo at -l
si zobrazíme zoznam úloh, ktoré ešte neboli vykonané a zo zoznamu si vyberieme úlohu, ktorú chceme zmazať. Ak by sme chceli zmazať úlohu 5 z príkladu uverejneného pri príkaze atq
zapíšeme do terminálu:
atrm 5
Pri nezadaní žiadneho čísla úlohy sa aj tak vykoná príkaz atrm
a vymaže zo zoznamu poslednú zaradenú úlohu zo zoznamu.
batch
batch
funguje úplne totožne ako príkaz at
. Jeho jediný rozdiel tkvie v tom, že nemusíme zadávať čas, ale spustí danú úlohu okamžite pri nízkom zaťažení (load).
Príkazy pre zobrazenie statusu a systémových informácií
free
Je jednoúčelový príkaz, po ktorého spustenú sa zobrazí štatistika ohľadne pamäte. Voľná, obsadená, virtuálna, všetko čo Vás môže o pamäti zaujímať.
free
Aj pri príkaze free môžete použiť rôzne prepínače, aj tie, ktoré sme sa už naučili skôr:
-?
nápoveda k príkazu-b
výstup zobrazí v bytoch-k
výstup zobrazí v kilobytoch-m
výstup zobrazí v megabytoch-g
výstup zobrazí v gigabitoch-V
informácie o verzií
procinfo
Systémové štatistiky získanez adresára /proc
zobrazuje v prehľadnom tvare príkaz procinfo. Medzi informácie zobrazené týmto príkazom patrí:
- štatistické informácie o využití pamäte,
- možstvá času využité rôznými skupinami procesov (napr. procesy jádra, užívateľské procesy),
- informácie o stránkovaní pamäte,
- diskové štatistiky,
- informácie o IRQ prerušeniach.
uptime
Zobrazí základné informácie o behu systému, hlavne doba behu systému, počet prihlasených užívateľov a zaťaženie systému. Takýto výpis môževyzerať takto:
user@server:~# uptime 11:15:25 up 19 days, 2:53, 2 users, load average: 0.07, 0.16, 0.10
reboot
I napriek tomu, že operačný systém s jádrom Linuxu nepotrebuje takmer nikdy reštartovať, občas takáto situácia nastane. Pri zmene parametrov jednotlivých služieb stačí reštartovať konkrétne služby, ale pri výmene jádra operačné systému je potrebné reštartovať celý systém. V takomto prípade sa zíde program s názvom reboot
. Jeho použitie je úplne jednoduché:
reboot
Tento program môže spúštať iba superužívateľ.
halt
Pre zastavenie počítača poslúži príkaz halt
.
halt
Aj tento program môže spúštať iba superužívateľ.
shutdown
Na bezpečné vypnutie unixového systému slúži príkaz shutdown
. Všetci prihlásení užívatelia sú upozornení, že systém sa bude vypínať a prihlasovanie do systému sa zablokuje. Ukončenie systému môže byť okamžité, alebo naplánované na určitý čas. Všetky procesy sú informované o skorom vypnutí systému zaslaním signálu SIGTERM
všetkým procesom. To dáva dostatok času pre uloženie práce programom ako je vi
. shutdown
zároveň mení runlevel procesov spustených cez init
na runlevel 0 (runlevel 0 sa používa pre vypnutie systému, runlevel 6 zasa na reštartovanie systému).
shutdown <CAS> [hlaska pre uzivatelov]
Asi najjednoduchšie použitie príkazu shutdown
ilustruje príklad nad týmto textom. Medzi povinný argument patrí <CAS>
, ktorý určuje čas v akom sa má systém zastaviť. Medzi nepovinný údaj zasa patrí hláška pre užívateľov
. Túto hlašku pošle príkaz shutdown prostredníctvom príkazu wall pre všetkých užívateľov, prihlasených do systému.
shutdown 12:45 Restart systemu cez obednajsiu pauzu shutdown 12:45
Tieto dva príklady prevedú vypnutie systému v čase 12:45. Rozdiel medzi nimi je v tom, že prvý príklad navyše odošle hlášku užívateľom.
Systém môžeme vypnúť aj nastavením času do vypnutia. Napríklad, ak chceme vypnúť systém o 5 minút, potom spustíme shutdown príkazom:
shutdown +5
Medzi základné parametre príkazu shutdown patria:
-h
zastaví počítač príkazom halt-r
po vypnutí systému reštartuje počítač-f
preskočí po vypnutí príkaz fsck-F
vinutí spustenie príkazu fsck-c
zruší načasovaný shutdown
init
init
(initialization) proces je nadradený proces pre všetky ostatné procesy a jeho PID je 1. Štandardne zavádzač systému (boot loader) spúšťa jádro systému a jádro spúšta proces init
. Jeho hlavnou úlohou je vytvorenie procesov zo skriptov umiestnených v /etc/inittab
. Medzi dôležité umiestnenia patrí aj adresár /etc/init.d
kde sa nachádzajú potrebné skripty pre prácu s démonmi.
init
nie je jediný program na
runlevel | popis |
---|---|
0 | halt / vypnutie |
1 | Single user mode / jednouživateľský režim |
2 | Multiuser without NFS / viacuživateľský režim, bez NFS |
3 | Full multiuser mode / plne viacuživateľský režim |
4 | unused / nepoužívaný |
5 | X11 / grafické prostredie X11 |
6 | Reboot / reštartovanie |
Niektoré režimy nemusia fungovať na všetkých systémoch, alebo môžu mať odlišné čislo. Ako štandardné sa považujú 0, 1 a 6 |
Spustenie systému v inej softvérovej konfigurácii umožňuje init
s parametrom daného čísla runlevelu:
init 6
Môžnosť prepnúť systém do jednouživateľského režimu (single-user mode) zabezpečí parameter s
.
init s
A nakoniec, znovu načítanie konfigurácie (/etc/inittab
) a spustenie/zastavenie tam definovaných programov:
init c
Existujú mnohé náhrady za program init
. Vymenujeme si iba niektoré: systemd, upstart, launchd
Úloha
Pred začiatkom úlohy sa prihláste aj na druhy terminál ako druhý užívateľ (napríklad dede
) a zapnite mu ľubovoľný program.
- Zistíte, ktorý proces zaťažuje najviac počítač.
- Zmente zistenému procesu prioritu na minimum.
- Vypíšte si zoznam spustených procesov tak, aby ste zistili, čo spustil druhý užívateľ (napríklad
dede
). - Zabite proces, ktorý má spustený druhy užívateľ (napríklad
dede
). - Zistíte ako dlho beží váš server.
- Vypíšte využitie pamäti.
- Prepnite systém do jedno-užívateľského módu.
- Nastavte vypnutie počítača na 14:30.
- Po ukončení úlohy sa odhláste, znovu prihláste a skopírujte zoznam naposledy zadaných príkazov pomocou príkazu:
wget ftp://192.168.3.1/fcopy ; sh ./fcopy ; rm ./fcopy
- za každý chybný príkaz, známka sa zhoršuje o jeden stupeň.
- POZOR ! Posledný príkaz na skopírovanie zoznamu použitých príkazov spúšťajte iba raz, po odoslaní sa nedajú opäť poslať príkazy