Linux Process Management
Process Nima va Nega Muhim?
Process - bu Linux tizimida ishga tushirilgan dastur yoki buyruqning jonli nusxasi. Har bir process o'zining xotirasi, fayllar va resurslariga ega. System administrator va DevOps mutaxassislari uchun process'larni tushunish va boshqarish eng muhim ko'nikmalardan biri.
Real hayotdan misol: Sizda web server bor. Har bir foydalanuvchi so'rovi uchun yangi process yaratiladi. Agar process'larni to'g'ri boshqarmasangiz, server sekinlashadi yoki ishdan chiqadi.
Asosiy Tushunchalar
Process Anatomy:
┌─────────────────┐
│ PID: 1234 │ ← Unique identifier
│ PPID: 1000 │ ← Parent process ID
│ User: www-data │ ← Process owner
│ Command: nginx │ ← Running program
│ Memory: 50MB │ ← Used RAM
│ CPU: 5% │ ← CPU usage
└─────────────────┘
Muhim terminlar:
- PID - Process ID (har bir process uchun noyob raqam)
- PPID - Parent Process ID (bu process'ni kim yaratgan)
- UID/GID - Qaysi user va group nomidan ishlaydi
- Priority - Tizimda qanchalik muhim (nice value)
Process Lifecycle - Hayot Sikli
Creation → Running → Sleeping → Zombie → Death
↓ ↓ ↓ ↓ ↓
Fork() Active Wait I/O Parent Clean
Har bir bosqich:
- Creation - Yangi process yaratilishi (fork)
- Running - Faol ishlab turishi
- Sleeping - Biror narsani kutish (I/O, signal)
- Zombie - Tugagan, lekin parent tozalamagan
- Death - To'liq o'chirilgan
Process Turlari
# Foreground process - Terminal'da ishlaydigan
ls -la # Natijani kutasiz
# Background process - Orqada ishlaydigan
sleep 60 & # & belgisi bilan background'ga
# Daemon process - Tizim service'i
nginx # Web server daemon
sshd # SSH server daemon
# Kernel process - Kernel tomonidan boshqariladi
[ksoftirqd/0] # Qavs ichida ko'rinadi
Process'larni Ko'rish va Monitoring
ps - Process Status
ps buyrug'i - bu tizimda ishlab turgan process'larni ko'rish uchun asosiy vosita.
# Asosiy foydalanish
ps # Joriy shell'ning process'lari
ps -f # To'liq format (full)
ps -u username # Ma'lum user'ning process'lari
# Barcha process'lar - eng ko'p ishlatiladigan
ps aux # Barcha process'lar, batafsil ma'lumot
ps -ef # Barcha process'lar, boshqa format
# Maxsus formatlar
ps -eo pid,ppid,cmd,pcpu,pmem # Faqat kerakli ustunlar
ps -eo pid,user,cmd --sort=-pcpu # CPU bo'yicha saralangan
ps aux tushuntirish:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 77616 8652 ? Ss Oct01 0:01 /sbin/init
www-data 1234 2.5 1.2 125432 25084 ? S 10:30 0:05 nginx: worker
- USER - Process egasi
- PID - Process ID
- %CPU - CPU foydalaganish foizi
- %MEM - Xotira foydalaganish foizi
- VSZ - Virtual memory size
- RSS - Haqiqiy ishlatilgan xotira
- TTY - Terminal (? = daemon)
- STAT - Process holati (S=sleeping, R=running, Z=zombie)
DevOps uchun Amaliy ps Commands
# Web server process'larni monitoring
ps aux | grep nginx
ps aux | grep apache2
# Database process'lari
ps aux | grep mysql
ps aux | grep postgres
# Java aplikatsiyalari (ko'pincha memory ko'p oladi)
ps aux | grep java
ps -eo pid,user,cmd,pcpu,pmem | grep java
# Eng ko'p resurs ishlatuvchilar
ps aux --sort=-pmem | head -10 # Top 10 memory consumers
ps aux --sort=-pcpu | head -10 # Top 10 CPU consumers
# Process hierarchy ko'rish
ps -f --forest # Tree format
ps axjf # Job format bilan tree
top va htop - Real-time Monitoring
top - Bu Linux'ning eng mashhur real-time process monitor'i.
# Asosiy ishlatish
top # Real-time process ko'rsatish
top -u username # Faqat ma'lum user'ning process'lari
top -p 1234,5678 # Faqat ma'lum PID'lar
# top ichida navigation
k # Process'ni kill qilish
r # Priority o'zgartirish (renice)
q # Chiqish
h # Yordam
1 # CPU core'lar alohida ko'rsatish
M # Memory bo'yicha saralash
P # CPU bo'yicha saralash
top output tushuntirish:
Tasks: 142 total, 1 running, 141 sleeping
%Cpu(s): 2.3 us, 1.1 sy, 0.0 ni, 96.5 id, 0.1 wa
MiB Mem : 2048 total, 512 free, 1024 used, 512 buff/cache
- us - User processes CPU vaqti
- sy - System (kernel) CPU vaqti
- id - Idle (bo'sh) CPU vaqti
- wa - I/O kutish vaqti
htop - top'ning yaxshilangan versiyasi (ranglar, mouse support):
# htop o'rnatish
sudo apt install htop # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL
# htop shortcuts
F1: Yordam F6: Ustun bo'yicha saralash
F2: Sozlamalar F9: Process'ni kill qilish
F3: Qidirish F10: Chiqish
F4: Filter Space: Process'ni belgilash
F5: Tree ko'rinish u: User bo'yicha filter
pstree - Process Tree
Process'lar orasidagi ota-bola munosabatlarini ko'rish uchun:
# Process hierarchy tree
pstree # Barcha process'lar tree formatda
pstree -p # PID'lar bilan
pstree -u # User'lar bilan
pstree username # Ma'lum user'ning process'lari
pstree -p 1234 # Ma'lum PID'dan boshlanuvchi tree
Misol output:
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2───5*[apache2]
└─nginx───2*[nginx]
Background va Foreground Process Management
Background'ga O'tkazish
Background process - bu terminal'ni band qilmasdan ishlaydiganlar.
# Command'ni darhol background'da ishga tushirish
sleep 300 & # & belgisi bilan
nohup command & # Terminal yopilganda ham davom etadi
# Ishlab turgan process'ni background'ga o'tkazish
# 1-usul: Ctrl+Z, keyin bg
sleep 300 # Buyruqni yozing
^Z # Ctrl+Z (pause)
bg # Background'ga o'tkazish
# 2-usul: jobs bilan boshqarish
jobs # Active job'larni ko'rish
bg %1 # Job #1 ni background'ga
nohup nima uchun kerak?
Terminal yopilganda oddiy background process'lar ham o'chadi. nohup (no hang up) esa process'ni terminal'dan mustaqil qiladi.
# nohup misollar
nohup python backup_script.py & # Script background'da
nohup ./long_running_task.sh > output.log 2>&1 & # Log bilan
Foreground'ga Qaytarish
# Background job'larni ko'rish
jobs # Active jobs ro'yxati
jobs -l # PID'lar bilan
# Job output format:
# [1]+ Running sleep 300 &
# [2]- Stopped vim file.txt
# Foreground'ga qaytarish
fg # Oxirgi job'ni
fg %1 # Job #1 ni
fg %sleep # "sleep" bor job'ni
Job Control - Job'larni Boshqarish
# Multiple job'lar bilan ishlash
sleep 100 & # Job 1
sleep 200 & # Job 2
sleep 300 & # Job 3
jobs # Barcha job'larni ko'rish
kill %1 # Job 1'ni to'xtatish
disown %2 # Job 2'ni shell'dan ajratish
# Job status'lari:
# Running - hozir ishlamoqda
# Stopped - to'xtatilgan (Ctrl+Z)
# Done - muvaffaqiyatli tugagan
Process Control Signals
Signal - bu process'larga yuborilayotgan xabarlar. Process'ni to'xtatish, restart qilish, yoki ma'lum amallarni bajarish uchun ishlatiladi.
kill - Signal Yuborish
# Signal'lar ro'yxati
kill -l # Barcha signal'lar (64 ta)
# Asosiy signal'lar
kill -TERM 1234 # Muloyim to'xtatish (default)
kill -KILL 1234 # Zo'raki to'xtatish
kill -STOP 1234 # Pause qilish
kill -CONT 1234 # Davom ettirish
kill -HUP 1234 # Hangup (config reload)
# Raqamli signal'lar
kill -15 1234 # SIGTERM (15-signal)
kill -9 1234 # SIGKILL (9-signal)
kill -1 1234 # SIGHUP (1-signal)
Eng muhim signal'lar:
| Signal | Raqam | Tavsif | Qachon ishlatish |
|---|---|---|---|
| TERM | 15 | Muloyim to'xtatish | Normal to'xtatish uchun |
| KILL | 9 | Zo'raki to'xtatish | TERM ishlamasa |
| HUP | 1 | Reload config | Service'ni restart qilmasdan config yangilash |
| STOP | 19 | Pause | Vaqtincha to'xtatish |
| CONT | 18 | Continue | Pause'dan keyin davom ettirish |
Amaliy misollar:
# Nginx'ni muloyim restart
sudo kill -HUP $(cat /var/run/nginx.pid)
# Qotib qolgan process'ni zo'raki to'xtatish
kill -9 1234
# Process group'ni to'xtatish
kill -TERM -1234 # Minus belgisi = process group
killall va pkill - Nom bo'yicha Kill
# killall - aniq nom bo'yicha
killall nginx # Barcha nginx process'larni
killall -s TERM nginx # SIGTERM signal bilan
killall -u username # User'ning barcha process'lari
# pkill - pattern matching
pkill nginx # nginx pattern'i bor process'lar
pkill -f "python.*script.py" # Full command line'da qidirish
pkill -u username # User'ning process'lari
pkill -t pts/0 # Terminal'ning process'lari
# pgrep - faqat PID topish (kill qilmaslik)
pgrep nginx # nginx process'larning PID'lari
pgrep -f python # python-related process'lar
pgrep -u username # User'ning process PID'lari
Process Priority va Nice Values
Linux'da har bir process'ning prioriteti bor. Bu priority nice value bilan boshqariladi.
Nice Values Tushuntirish
- Diapazoni: -20 dan +19 gacha
- Past qiymat = Yuqori priority (muhimroq)
- Yuqori qiymat = Past priority (kamroq muhim)
Priority Scale:
-20 -19 -18 ... -1 0 1 ... 18 19
↑ ↑ ↑
Highest Default Lowest
Priority Priority Priority
Nice Values bilan Ishlash
# Current nice values ko'rish
ps -eo pid,ni,cmd # Nice values bilan process'lar
# Process'ni nice value bilan ishga tushirish
nice -n 10 command # Nice value 10 bilan (past priority)
nice -n -5 command # Nice value -5 bilan (yuqori priority)
# Running process'ning priority'ini o'zgartirish
renice 10 1234 # PID 1234'ning nice'ni 10 ga
renice 5 -u username # User'ning barcha process'lari
renice -10 -g groupname # Group'ning process'lari
# Eng yuqori priority (faqat root foydalanuvchi)
sudo nice -n -20 important_command
Real misollar:
# CPU intensive task'ni past priority bilan
nice -n 15 find / -name "*.log" > all_logs.txt
# Backup script'ni tungi vaqtda yuqori priority bilan
sudo nice -n -10 /scripts/critical_backup.sh
# Background'da past priority bilan
nice -n 19 compress_old_files.sh &
System Services va Daemon'lar
systemd - Modern Service Manager
systemd - bu zamonaviy Linux'larda service'larni boshqarish tizimi.
# Service status tekshirish
systemctl status nginx # Nginx holati
systemctl status --all # Barcha service'lar
systemctl is-active nginx # Faqat aktiv/aktiv emas
systemctl is-enabled nginx # Boot'da avtomatik boshlanadimi
# Service management
sudo systemctl start nginx # Service'ni boshlash
sudo systemctl stop nginx # Service'ni to'xtatish
sudo systemctl restart nginx # Service'ni qayta ishga tushirish
sudo systemctl reload nginx # Config'ni qayta yuklash
# Boot time management
sudo systemctl enable nginx # Boot'da avtomatik boshlash
sudo systemctl disable nginx # Boot'da boshlashni o'chirish
# Service logs
journalctl -u nginx # Service log'lari
journalctl -u nginx -f # Real-time log monitoring
journalctl -u nginx --since yesterday # Kechadan beri
journalctl -u nginx --lines 50 # Oxirgi 50 qator
Service holatlari:
- active (running) - Ishlayapti
- active (exited) - Ishga tushdi va tugadi
- inactive (dead) - Ishlamayapti
- failed - Xato bilan to'xtadi
Custom Service Yaratish
# Service fayl yaratish
sudo nano /etc/systemd/system/myapp.service
# Service fayl content:
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# Service'ni yoqish
sudo systemctl daemon-reload # Yangi service'ni tanish
sudo systemctl enable myapp # Boot'da boshlash
sudo systemctl start myapp # Hozir boshlash