Skip to content

4. Jarayonlar va resurslar — 25 ta masala

Bu mavzuda sinov jarayonlari uchun sleep dan foydalaniladi. Ular tugagach kill bilan tozalang.

1. Tizimdagi barcha jarayonlarni to'liq formatda ko'rsating va ustunlarni (USER, PID, %CPU, %MEM, STAT) izohlang.
Misol: birinchi qator ustun nomlari.

Yechim

ps aux | head -n 5
STAT jarayon holatini beradi: R — ishlayapti, S — uxlayapti (kutyapti), D — uzilmas kutish (odatda I/O), Z — zombi, T — to'xtatilgan.

2. Jarayonlarni ota–bola daraxti ko'rinishida chiqaring.
Misol: systemd ostida sshd, uning ostida sessiyalar.

Yechim

ps -ef --forest
Muqobil: pstree -p.

3. sshd jarayonining PID sini nomi bo'yicha toping.
Misol: 1021 /usr/sbin/sshd -D

Yechim
pgrep -a sshd

4. Xotirani eng ko'p ishlatayotgan 5 ta jarayonni toping.
Misol: birinchi qatorda eng ko'p %MEM.

Yechim

ps aux --sort=-%mem | head -n 6
- belgisi kamayish tartibini bildiradi. CPU uchun --sort=-%cpu.

5. sleep 300 ni fonda ishga tushiring, PID ni toping va uni muloyim to'xtating (SIGTERM).
Misol: kill dan keyin pgrep sleep hech narsa chiqarmaydi.

Yechim

sleep 300 &
pgrep sleep
kill "$(pgrep sleep)"
kill PID standart bo'yicha SIGTERM (15) yuboradi: jarayon tozalanish va yopilish imkoniga ega bo'ladi.

6. SIGTERM ga javob bermagan jarayonni majburan o'ldiring. Nega bu oxirgi chora ekanini tushuntiring.
Misol: kill -9 PID dan keyin jarayon yo'q.

Yechim

sleep 300 &
kill -9 $!
SIGKILL (9) ni jarayon ushlay olmaydi: u vaqtinchalik fayllarni tozalamaydi, ochiq tranzaksiyani yopmaydi. $! — oxirgi fondagi jarayonning PID i. Tartib: avval kill (15), kutish, keyin kill -9.

7. Mavjud signallar ro'yxatini ko'ring va HUP, INT, TERM, KILL raqamlarini toping.
Misol: 1) SIGHUP 2) SIGINT 9) SIGKILL 15) SIGTERM

Yechim
kill -l

8. Ishlayotgan xizmatga konfiguratsiyani qayta o'qishni (qayta ishga tushirmasdan) buyuring.
Misol: nginx master jarayoniga HUP.

Yechim

sudo kill -HUP "$(cat /run/nginx.pid)"
Ko'p daemon'lar SIGHUP ni "konfiguratsiyani qayta o'qi" deb tushunadi. systemd orqali: sudo systemctl reload nginx.

9. Buyruq qatori python3 app.py bo'lgan jarayonlarni nomi bo'yicha emas, to'liq buyruq bo'yicha o'ldiring.
Misol: pkill -f 'python3 app.py'

Yechim

pkill -f 'python3 app.py'
-fsiz pkill faqat jarayon nomini (python3) solishtiradi va boshqa skriptlarni ham o'ldirib yuborishi mumkin.

10. sleep 600 ni ishga tushiring, Ctrl+Z bilan to'xtating, fonda davom ettiring, so'ng yana oldingi planga qaytaring.
Misol: jobs ro'yxatida holat ketma-ket Stopped → Running → o'chadi.

Yechim
sleep 600
# Ctrl+Z
jobs
bg %1
fg %1
# Ctrl+C

11. Terminal yopilganda ham davom etadigan jarayon ishga tushiring.
Misol: SSH sessiyasi uzilgach ham long.sh ishlaydi, natija nohup.out da.

Yechim

nohup ./long.sh > long.log 2>&1 &
Terminal yopilganda jarayonga SIGHUP keladi; nohup uni e'tiborsiz qoldiradi. Uzoq muddatli ishlar uchun tmux yoki systemd xizmati ishonchliroq.

12. Jarayonni past ustuvorlik bilan ishga tushiring va ishlayotganining ustuvorligini o'zgartiring.
Misol: ps -o pid,ni,cmd -p PID da NI = 10, keyin 15.

Yechim

nice -n 10 sleep 300 &
sudo renice -n 15 -p $!
ps -o pid,ni,cmd -p $!
nice qiymati kattaroq bo'lsa, jarayon CPU'ni kamroq oladi. Manfiy qiymat (yuqori ustuvorlik) faqat root uchun.

13. Zombi jarayonlarni toping.
Misol: STAT ustuni Z bilan boshlanadigan qatorlar.

Yechim

ps -eo pid,ppid,stat,cmd | awk '$3 ~ /^Z/'
Zombi allaqachon tugagan, faqat ota jarayon uning chiqish kodini wait() bilan o'qimagan. Uni kill bilan o'ldirib bo'lmaydi; ota jarayonni to'g'rilash yoki qayta ishga tushirish kerak.

14. Uzoq vaqt D holatida turgan jarayon nimani anglatadi? Qanday topiladi?
Misol: STAT = D.

Yechim

ps -eo pid,stat,wchan:20,cmd | awk '$2 ~ /^D/'
D — uzilmas kutish, ko'pincha disk yoki NFS javobini kutish. Bunday jarayon signal bilan to'xtamaydi. Ko'p D jarayon — disk yoki tarmoq fayl tizimi muammosi belgisi.

15. Jarayonning to'liq buyruq qatorini va xotira sarfini /proc orqali o'qing.
Misol: VmRSS: 2048 kB

Yechim

sleep 300 & pid=$!
tr '\0' ' ' < /proc/$pid/cmdline; echo
grep VmRSS /proc/$pid/status
/proc/PID/cmdline argumentlarni NUL bilan ajratadi, shuning uchun tr.

16. Jarayon qaysi dasturdan ishga tushganini va qaysi katalogda ishlayotganini toping.
Misol: exe -> /usr/bin/sleep, cwd -> /home/student.

Yechim
ls -l /proc/$pid/exe /proc/$pid/cwd

17. 8080-portda kim tinglayotganini va uning PID ini toping.
Misol: LISTEN ... users:(("python3",pid=2310,fd=3))

Yechim

sudo ss -ltnp 'sport = :8080'
-p jarayon nomini ko'rsatadi, boshqa foydalanuvchi jarayonlari uchun sudo kerak.

18. Jarayon ochgan fayllarni ko'ring. Keyin o'chirilgan, lekin hali ochiq turgan fayllarni toping.
Misol: (deleted) yozuvi bilan qatorlar.

Yechim

sudo lsof -p "$pid"
sudo lsof +L1
+L1 — havolalar soni 1 dan kam (ya'ni o'chirilgan) ochiq fayllar. Bu disk "to'la" ko'rinib, du esa kam ko'rsatishining odatiy sababi.

19. uptime dagi load average ning uchta sonini tushuntiring va yadrolar soni bilan solishtiring.
Misol: load average: 0.52, 0.80, 1.10.

Yechim

uptime
nproc
Sonlar — oxirgi 1, 5 va 15 daqiqadagi o'rtacha ishlayotgan va navbat kutayotgan jarayonlar soni. 4 yadroli mashinada doimiy 4 dan yuqori qiymat — o'tkazuvchanlikdan oshib ketgan yuk. Load faqat CPU emas, D holatidagi I/O kutayotganlarni ham o'z ichiga oladi.

20. free -h natijasida qaysi ustun real bo'sh xotirani ko'rsatadi?
Misol: available.

Yechim

free -h
free kichik ko'rinishi mumkin, chunki Linux bo'sh xotirani disk keshiga ishlatadi. Qancha xotira yangi dasturga berilishi mumkinligi available ustunida.

21. vmstat 1 5 dagi qaysi ustunlar xotira yetishmasligini (swap) bildiradi?
Misol: si va so doimiy noldan katta.

Yechim

vmstat 1 5
si/so — swap'dan o'qish/yozish. Doimiy yuqori qiymat tizim xotira uchun kurashayotganini bildiradi. wa — I/O kutishga ketgan CPU vaqti, r — ishga navbat kutayotganlar.

22. Jarayon "sababsiz" yo'qolgan. OOM killer o'ldirmaganmi, tekshiring.
Misol: Out of memory: Killed process 1234 (java).

Yechim

sudo dmesg -T | grep -i -E 'out of memory|killed process'
sudo journalctl -k --since "1 hour ago" | grep -i oom
OOM killer yadro xotirasi tugaganda eng "qimmat" jarayonni SIGKILL bilan o'ldiradi. Jarayonning o'zi hech qanday log yozmaydi, izni faqat yadro logidan topasiz.

23. Joriy shell uchun ochiq fayllar chegarasini ko'ring va oshiring.
Misol: ulimit -n → 1024, keyin 4096.

Yechim

ulimit -n
ulimit -n 4096
Too many open files xatosi shu chegaradan oshganda chiqadi. Doimiy o'zgartirish /etc/security/limits.conf yoki systemd'da LimitNOFILE=.

24. Skript Ctrl+C bosilganda tozalash xabarini chiqarib, keyin chiqsin.
Misol: Ctrl+C → tozalanyapti....

Yechim

cat > trap.sh <<'EOF'
#!/bin/bash
trap 'echo "tozalanyapti..."; exit 1' INT TERM
sleep 60
EOF
chmod +x trap.sh && ./trap.sh
trap signalni ushlaydi. SIGKILL (9) va SIGSTOP ni ushlab bo'lmaydi.

25. strace yordamida buyruq qaysi fayllarni ochishga urinishini ko'ring.
Misol: openat(AT_FDCWD, "/etc/ld.so.cache", ...) = 3, topilmaganda -1 ENOENT.

Yechim

strace -f -e trace=openat ls 2>&1 | head -n 20
Dastur "fayl topilmadi" yoki "ruxsat yo'q" deb jim turib qolsa, strace aynan qaysi yo'l bilan ENOENT / EACCES olganini ko'rsatadi.