Protsessid, tööd ja signaalid
Protsess on töötav programmi eksemplar, millel on süsteemi protsessinumber ehk PID. Shelli töö võib koosneda ühest või mitmest protsessist, näiteks torust. Signaal on protsessile saadetav juhtsõnum.
Vaata, mis töötab
| Käsk | Tulemus |
|---|---|
ps | selle terminaliga seotud protsesside hetkeseis |
ps aux | laiem loend koos omaniku, PID-i, CPU ja mälu kasutusega |
top | uuenev protsessivaade; välju q-ga |
jobs -l | selle shelli töönumbrid, seisud ja PID-id |
htop on eraldi paigaldatav mugavam jälgimisvaade. CPU ja mälu näitude tähendus ning arvutusvahemik sõltuvad tööriistast; üks hetkepilt ei tõesta pikaajalist koormust.
ps aux tavaväljundis on kolmas veerg CPU protsent ja neljas mälu protsent. sort -nrk sordib valitud veeru arvuliselt kahanevaks; head jätab kümme esimest rida:
ps aux | sort -nrk 3 | head
ps aux | sort -nrk 4 | head
Need annavad kiire ülevaate, kuid päiserida ei püsi eraldi päisena. Pikema jälgimise jaoks kasuta top-i.
Järjest või korraga
sleep N ootab N sekundit. Tavaliselt ootab shell käsu lõppu enne järgmise alustamist; ; eraldab järjestikuseid käske.
sleep 3; echo 'pikk töö valmis'
sleep 1; echo 'lühike töö valmis'
Esimene teade ilmub umbes kolme, teine nelja sekundi järel. Nüüd võrdle taustatöödega: & lubab shellil kohe edasi minna, sh -c käivitab jutumärkides oleva käsujada eraldi shellis ja wait ootab oma taustatööde lõppu.
sh -c 'sleep 3; echo "pikk töö valmis"' &
sh -c 'sleep 1; echo "lühike töö valmis"' &
jobs
wait
Tavaliselt ilmub hiljem alustatud lühikese töö teade esimesena ning mõlemad lõpevad umbes kolme sekundiga. Käivitamisjärjekord ei määra lõpetamisjärjekorda. Kui sisestad ridu aeglaselt, võib töö enne jobs-i juba valmis olla.
Peata ja jätka sama tööd
Tee see katse interaktiivses shellis, mitte ühe kopeeritud skriptina.
- Käivita
sleep 120, vajutaCtrl-z. Programm peatub ja viip tuleb tagasi. - Käivita veel kord
sleep 120ning vajuta jälleCtrl-z. - Vaata
jobs -l. Otsi oma kahesleep-töö numbrid. - Kui need on 1 ja 2, jätka esimest käsuga
bg %1ja too teine ette käsugafg %2. - Katkesta esiplaani töö
Ctrl-c-ga. Too esimene ettefg %1ja katkesta ka see.
Kasuta tegelikke töönumbreid, mitte tingimata 1 ja 2. %1 on praeguse shelli töönumber; paljas number käsule kill tähendab PID-i. bg ja fg jätkavad sama programmi, mitte ei käivita seda algusest.
Lõpetamine ja signaalid
| Tegevus | Mõju |
|---|---|
Ctrl-c | saadab esiplaani protsessigrupile tavaliselt SIGINT katkestussoovi |
Ctrl-z | saadab tavaliselt SIGTSTP ajutise peatamise signaali |
kill PID | vaikimisi SIGTERM: programm saab viisakalt lõpetada |
kill -KILL PID | sunnitud lõpetamine; programm ei saa enam koristada ega salvestada |
Ära proovi suvalist PID-i. Harjutuseks käivita oma ootaja ja salvesta $! kaudu viimase taustaprotsessi PID muutujasse:
sleep 120 &
ootaja=$!
ps -p "$ootaja"
kill "$ootaja"
Võid näha shelli teadet Terminated. Sunnitud lõpetamine on viimane abinõu, mitte veaotsingu algus.
Väike kohalik server
Python peab olema paigaldatud. Loo eraldi kataloog, milles pole isiklikke faile. --bind 127.0.0.1 lubab ühendusi ainult sellest arvutist; muidu kuulab Pythoni server vaikimisi ka võrguliideseid.
mkdir -p ~/tmp/serveri-naide
cd ~/tmp/serveri-naide
printf '%s\n' 'Tere kohalikust serverist!' > index.html
python3 -m http.server 8000 --bind 127.0.0.1 &
serveri_pid=$!
Ava brauseris localhost:8000. Kui port on hõivatud, vali teine port nii käsus kui aadressis. Lõpetamiseks kasuta samas shellis kill "$serveri_pid". See lõpetab ainult sinu salvestatud PID-iga protsessi.
Kas töö jääb akna sulgemisel alles?
& üksi seda ei taga. Interaktiivse kaugtöö jaoks kasuta tmux-i või screeni.
nohup paneb käivitatava programmi eirama ühenduse katkemisega seotud SIGHUP-signaali. Suuna ka sisend ja väljund terminalist eemale:
nohup sh -c 'sleep 10; echo "valmis"' < /dev/null > nohup-naide.log 2>&1 &
Kümne sekundi pärast peaks logis olema valmis. nohup ei kaitse taaskäivituse, voolukatkestuse ega administraatori sessioonipuhastuse eest.
Bashi ja zsh disown eemaldab töö shelli tööde loendist; see ei vabasta programmi automaatselt terminalisisendist ega -väljundist. Kasuta seda vaid siis, kui tead programmi sõltuvusi.
Minitest
- Muuda paralleelkatse ooteajad viieks ja kaheks sekundiks. Ennusta järjestikuse ja samaaegse variandi kogukestus.
- Miks ei näe uus terminaliaken vana akna
jobs-loendit? - Mis vahe on peatatud ja lõpetatud programmil?
- Käivita kohalik server, vaata selle PID-i ning lõpeta ainult see protsess. Kontrolli brauseris, et teenus enam ei vasta.
Peatüki täisspikker
Praktiline kasutus
Eesmärk
erista protsessi, shelli tööd ja signaali: vaata, millised protsessid töötavad, peata vajadusel ning jätka pikka tööd taustal
Põhikujud
ps aux | grep pythonotsi protsessps aux | sort -nrk 3 | headsuur CPU kasutus selles hetkepildisps aux | sort -nrk 4 | headsuur mälukasutussleep 300 &käivita taustaljobsvaata töidfg %1too töö ettetopjälgi reaalajaskillsaada signaalbgjätka taustal
Olulisemad lipud, märgid ja kiirnupud
Ctrl-ckatkesta programmi tööCtrl-zpeata ajutiselt;fgette,bgtaustale&käivita taustal%1töö numberkill -15viisakas lõppkill -9jõuga lõpp