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
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.
3. sshd jarayonining PID sini nomi bo'yicha toping.
Misol: 1021 /usr/sbin/sshd -D
4. Xotirani eng ko'p ishlatayotgan 5 ta jarayonni toping.
Misol: birinchi qatorda eng ko'p %MEM.
Yechim
- 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
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
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
8. Ishlayotgan xizmatga konfiguratsiyani qayta o'qishni (qayta ishga tushirmasdan) buyuring.
Misol: nginx master jarayoniga HUP.
Yechim
Ko'p daemon'larSIGHUP 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
-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.
11. Terminal yopilganda ham davom etadigan jarayon ishga tushiring.
Misol: SSH sessiyasi uzilgach ham long.sh ishlaydi, natija nohup.out da.
Yechim
Terminal yopilganda jarayongaSIGHUP 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 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
Zombi allaqachon tugagan, faqat ota jarayon uning chiqish kodiniwait() 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
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
/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.
17. 8080-portda kim tinglayotganini va uning PID ini toping.
Misol: LISTEN ... users:(("python3",pid=2310,fd=3))
Yechim
-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
+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
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 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
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
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
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.