Skip to main content

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:

  1. Creation - Yangi process yaratilishi (fork)
  2. Running - Faol ishlab turishi
  3. Sleeping - Biror narsani kutish (I/O, signal)
  4. Zombie - Tugagan, lekin parent tozalamagan
  5. 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:

SignalRaqamTavsifQachon ishlatish
TERM15Muloyim to'xtatishNormal to'xtatish uchun
KILL9Zo'raki to'xtatishTERM ishlamasa
HUP1Reload configService'ni restart qilmasdan config yangilash
STOP19PauseVaqtincha to'xtatish
CONT18ContinuePause'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