Pozadinski procesi
Kada pokreneš komandu u terminalu, shell čeka da se završi pre nego što ti vrati prompt. To je pokretanje u prvom planu (foreground). Međutim, ponekad hoćeš da program radi u pozadini dok ti nastavljaš sa radom — tu dolazi do izražaja pokretanje u pozadini (background).
Operator & — pokretanje u pozadini
Dodavanjem znaka & na kraju komande, pokrećeš je u pozadini:
komanda &
Shell odmah vraća prompt, a program nastavlja da radi. Ispisuje se broj posla i PID:
sleep 100 &
# [1] 1234
[1]— broj posla (job number) u ovoj sesiji1234— PID procesa
Možeš pokrenuti više procesa u pozadini odjednom:
wget https://primer.com/fajl1.zip &
wget https://primer.com/fajl2.zip &
Komanda jobs — lista poslova
jobs prikazuje sve procese koji su pokrenuti u pozadini ili pauzirani u trenutnoj sesiji:
jobs
[1]- Running sleep 100 &
[2]+ Stopped nano dokument.txt
| Simbol | Značenje |
|---|---|
+ |
Trenutni (podrazumevani) posao |
- |
Prethodni posao |
| broj u zagradama | Broj posla |
Komanda fg — vrati u prvi plan
fg (foreground) vraća posao iz pozadine ili pauze u prvi plan:
fg # Vraća podrazumevani (poslednji) posao
fg %1 # Vraća posao broj 1
fg %2 # Vraća posao broj 2
Nakon fg, program ponovo zauzima terminal i moraš sačekati da se završi (ili ga pauzirati/prekinuti).
Ctrl+Z i komanda bg
Dok je program u prvom planu, pritiskom na Ctrl+Z ga pauziraš i vraćaš se u shell:
nano dokument.txt
# ... editovanje ...
# [Ctrl+Z]
# [1]+ Stopped nano dokument.txt
Nakon pauze, možeš ga nastaviti u pozadini komandom bg:
bg # Nastavi podrazumevani pauziran posao u pozadini
bg %1 # Nastavi posao broj 1 u pozadini
Tok rada
pokretanje programa --> Ctrl+Z --> bg --> radi u pozadini
--> fg --> vraća se u prvi plan
Komanda nohup — preživljavanje logout-a
Problem sa pozadinskim procesima je što su vezani za sesiju terminala. Kad zatvoriš terminal, sistem šalje SIGHUP signal svim procesima koje si pokrenuo iz tog terminala — oni se gase.
nohup (no hang up) blokira taj signal — proces može da nastavi da radi čak i nakon logout-a:
nohup komanda &
Standardni izlaz se preusmerava u fajl nohup.out u trenutnom direktorijumu:
nohup python3 skript.py &
# [1] 2345
# nohup: ignoring input and appending output to 'nohup.out'
Da izlaz preusmeris na drugi fajl:
nohup python3 skript.py > moj_log.txt 2>&1 &
# ↑ > moj_log.txt — standardni izlaz ide u fajl
# ↑ 2>&1 — greske (stderr) se preusmeravaju na isti izlaz
# ↑ & — pokreni u pozadini
Napomena:
nohupsam po sebi ne prikazuje napredak — korisno je preusmeriti izlaz u log fajl koji možeš pratiti satail -f.
screen i tmux — alternativni shell sa persistentnim sesijama
screen i tmux su multiplekseri terminala — alati koji kreiraju virtuelne terminalne sesije. Možeš se odjaviti, a sesija i svi procesi u njoj nastavljaju da rade. Kada se vratiš, ponovo se prikačiš i vidiš sve kao da nisi ni otišao.
Osnovna upotreba (screen):
screen # Pokreni novu sesiju
# ... radiš nešto ...
# Ctrl+A, zatim d — odkvači se (sesija ostaje aktivna u pozadini)
screen -r # Vrati se na sesiju
tmux je modernija alternativa sa istim principom rada (Ctrl+B d za odkvačivanje, tmux attach za povratak). Na produkcijskim serverima je tmux danas češći izbor.
Preporuka: Za kratke zadatke koji ne zahtevaju interakciju,
nohup &je dovoljan. Za duže sesije, naročito na udaljenim serverima, koristitmux.