Mundarija (35)
- Bu darsda
- 1. Nega bu kerak?
- 2. Jarayonlarni ko'rish
- 2.1 Eslatma: jarayon va PID
- 2.2 ps — jarayonlar ro'yxati
- 2.3 Hamma jarayonlar: ps aux
- 2.4 top — jonli ko'rinish
- 3. Jarayonni to'xtatish
- 3.1 Signal nima?
- 3.2 Ctrl + C — oldindagi dasturni to'xtatish
- 3.3 kill — PID bo'yicha to'xtatish
- 4. Oldingi va orqa fon
- 4.1 & — orqa fonda ishga tushirish
- 4.2 jobs, fg, kill %1
- 4.3 Ctrl + Z — tuzoq
- 5. Port nima?
- 6. EADDRINUSE: band portni bo'shatish
- 6.1 Xatoni o'qish
- 6.2 Uch qadamli yechim
- 6.3 macOS, Linux va WSL'da: lsof
- 6.4 Windows'da: netstat va taskkill
- 6.5 Bitta buyruq: npx kill-port
- 6.6 Ikkinchi yo'l: boshqa port
- 7. Ko'p uchraydigan xatolar
- 7.1 Terminalni yopdim — server baribir ishlayapti
- 7.2 Git Bash'da taskkill /PID
- 7.3 Git Bash'dagi kill Windows PID'ini tanimaydi
- 7.4 Birinchi urinishda kill -9
- 7.5 Tizim jarayonini o'ldirish
- 8. Mashqlar
- 1-mashq (oson): Orqa fon
- 2-mashq (o'rta): Ctrl + Z tuzog'i
- 3-mashq (qiyin): Port tergovi
- 9. Real ishda
- Xulosa
Jarayonlar va band portlar: ps, kill va EADDRINUSE
Qisqacha: Ishlab turgan har bir dastur — PID raqamli jarayon. Uni
psbilan ko'rasiz vakill PIDbilan to'xtatasiz (qotib qolsa —kill -9 PID).EADDRINUSE: address already in use :::3000xatosi — "3000-portni boshqa jarayon egallab turibdi" degani. Kimliginilsof -i :3000(macOS, Linux) yokinetstat -ano | findstr :3000(Windows) topadi, keyin o'sha jarayon to'xtatiladi.
Bu darsda
- Terminalda ishlab turgan jarayonlarni ko'rasiz:
ps,top, Windows'datasklist. Ctrl + CvaCtrl + Zfarqini,&,jobs,fgbilan orqa fonda ishlashni bilasiz.killvakill -9qanday signal yuborishini va qaysi birini qachon ishlatishni tushuntira olasiz.- Port nima ekanini oddiy so'zlar bilan aytib bera olasiz.
EADDRINUSExatosini ko'rganda portni kim band qilganini topib, bo'shatasiz — Windows'da ham, macOS/Linux'da ham.
Oldin bilishingiz kerak: Operatsion tizim nima: kernel, jarayon va oqim, Exit code va buyruqlarni zanjirlash, Oqimlar, pipe va yo'naltirish.
1. Nega bu kerak?
Bir kun siz o'z saytingizni kompyuteringizda ishga tushirasiz va ekranda qizil yozuv chiqadi:
Error: listen EADDRINUSE: address already in use :::3000Kecha hammasi ishlagan edi. Kod o'zgarmagan. Nima bo'ldi?
Ko'pincha javob kulgili: kechagi serveringiz hali ham ishlayapti. Siz terminal oynasini yopgansiz yoki Ctrl + Z bosgansiz — lekin dastur o'chmagan. U 3000-portni egallab turibdi, yangi nusxa esa o'sha joyga sig'maydi.
Bu xato kursda ham, real ishda ham juda ko'p uchraydi. Uni hal qilish uchun uch narsani bilish kerak: jarayonni qanday ko'rish, qanday to'xtatish va port nima.
2. Jarayonlarni ko'rish
2.1 Eslatma: jarayon va PID
OS darsida ko'rgan edik: diskdagi dastur — shunchaki fayl. Uni ishga tushirganingizda operatsion tizim jarayon (process) yaratadi va unga takrorlanmas raqam beradi — PID (Process ID). Windows'da buni Task Manager'da ko'rgansiz. Endi xuddi shuni terminalda qilamiz.
Mashq uchun bizga uzoq ishlaydigan dastur kerak. sleep shunday buyruq: u berilgan soniya davomida "uxlaydi" — hech narsa qilmaydi, faqat ishlab turadi. Git Bash, WSL, macOS va Linux'da bor.
2.2 ps — jarayonlar ro'yxati
Birinchi terminal oynasida yozing:
sleep 300Prompt qaytmaydi — sleep 300 soniya (5 daqiqa) ishlaydi. Endi ikkinchi terminal oynasini oching va yozing:
psLinux yoki WSL'da natija shunga o'xshaydi:
PID TTY TIME CMD
2210 pts/0 00:00:00 bash
2388 pts/1 00:00:00 sleep
2390 pts/0 00:00:00 ps| Ustun | Ma'nosi |
|---|---|
PID |
Jarayon raqami — eng muhimi |
TTY |
Qaysi terminal oynasiga tegishli |
TIME |
Protsessor vaqti qancha sarflangan |
CMD |
Qaysi buyruq |
Raqamlar sizda boshqacha bo'ladi. ps ning o'zi ham ro'yxatda bor — u ham jarayon.
Git Bash'da ps biroz boshqa ustunlar chiqaradi, jumladan WINPID — shu jarayonning Windows'dagi raqami. Git Bash'dagi ps faqat Git Bash ichida ishga tushgan jarayonlarni ko'rsatadi. Windows'ning barcha jarayonlari uchun tasklist (yoki Task Manager) kerak.
2.3 Hamma jarayonlar: ps aux
Oddiy ps faqat sizning terminalingizdagi jarayonlarni ko'rsatadi. Butun tizimni ko'rish uchun macOS va Linux'da ps aux yoziladi. Ro'yxat juda uzun bo'ladi, shuning uchun pipe darsidagi grep bilan filtrlanadi:
ps aux | grep sleepaux — uchta qisqa flag birga: a — hamma foydalanuvchilarniki, u — egasi va xotira ustunlari bilan, x — terminalga bog'lanmaganlari ham. Natijada USER, PID, %CPU (protsessor foizi), %MEM (xotira foizi) va COMMAND ustunlari bo'ladi. Qator juda uzun, shuning uchun bu yerda ko'rsatmaymiz — o'zingiz sinab ko'ring.
Maslahat:
ps aux | grep sleepnatijasida ko'pinchagrep sleepqatorining o'zi ham chiqadi. Chunki qidirish paytidagrepham jarayon edi va nomidasleepso'zi bor. Uni e'tiborsiz qoldiring.
Windows'da (Git Bash yoki PowerShell'da) shunga o'xshash buyruq — tasklist:
Image Name PID Session Name Session#
========================= ======== ================ ===========
node.exe 7880 Console 1(Chiqish qisqartirilgan: o'ng tomonda yana "Mem Usage" ustuni bor.)
2.4 top — jonli ko'rinish
ps — bir lahzalik surat. top esa jonli ro'yxat: har 1–3 soniyada yangilanadi va eng ko'p protsessor ishlatayotgan jarayonlarni tepada ko'rsatadi. Bu — terminaldagi Task Manager. Chiqish — q tugmasi.
top macOS, Linux va WSL'da bor, Git Bash'da yo'q. Windows'da uning o'rnida Task Manager (Ctrl + Shift + Esc) ishlatiladi. Chiroyliroq muqobili htop ni zamonaviy CLI vositalari darsida ko'ramiz.
Tekshirib ko'ring:
psnatijasidasleepjarayonining PID'i 2388. Ertaga xuddi shu buyruqni ishga tushirsangiz, PID yana 2388 bo'ladimi?
Javob
Deyarli aniq — yo'q. PID har ishga tushirishda operatsion tizim tomonidan yangidan beriladi. Shuning uchun PID'ni har safar ps (yoki boshqa buyruq) bilan qayta topasiz, eslab yurmaysiz.
3. Jarayonni to'xtatish
3.1 Signal nima?
Jarayonni "to'xtatish" aslida unga signal yuborish demak. Signal — operatsion tizim jarayonga yuboradigan qisqa xabar: "to'xta", "yopil", "uxla". Har signalning nomi va raqami bor. Bizga to'rttasi kerak:
| Signal | Raqam | Ma'nosi | Qanday yuboriladi |
|---|---|---|---|
| SIGINT | 2 | "To'xta" (interrupt) | Ctrl + C |
| SIGTERM | 15 | "Iltimos, yopil" | kill PID |
| SIGKILL | 9 | "Darhol o'l" | kill -9 PID |
| SIGTSTP | 20 (Linux) | "Pauza qil" | Ctrl + Z |
SIGINT va SIGTERM — iltimos. Dastur ularni "eshitib", ochiq fayllarini saqlab, toza yopiladi. SIGKILL esa dasturga umuman yetib bormaydi: operatsion tizim jarayonni shunchaki o'chiradi.
O'xshatish: mehmon ketishi kerak. SIGTERM — "Vaqt bo'ldi, yig'inib chiqsangiz". Mehmon kiyinadi, xayrlashadi, eshikni yopadi. SIGKILL — mehmonni oyog'ini yerga tekkizmay ko'chaga chiqarib yuborish. Tez, lekin paltosi ichkarida qoladi.
3.2 Ctrl + C — oldindagi dasturni to'xtatish
Birinchi oynadagi sleep 300 ga qayting va Ctrl + C bosing. Prompt darhol qaytadi — dastur to'xtadi. Terminal darsida buni "to'xtatish" deb o'rgangan edik; aslida bu SIGINT signali.
Exit code darsidan eslang: Ctrl + C bilan to'xtagan dastur 130 kodini qaytaradi. Bu tasodif emas: 128 + 2 (SIGINT raqami).
3.3 kill — PID bo'yicha to'xtatish
Dastur boshqa oynada yoki orqa fonda ishlayotgan bo'lsa, Ctrl + C yetib bormaydi. Unda PID kerak:
kill 2388Bu SIGTERM yuboradi. Muvaffaqiyatli bo'lsa, hech narsa chiqmaydi (yangiliksiz — yaxshi yangilik). Jarayon allaqachon yo'q bo'lsa:
bash: kill: (2388) - No such process"Bunday jarayon yo'q" — ehtimol u o'zi tugagan yoki PID'ni adashtirdingiz.
Dastur SIGTERM'ga javob bermasa (qotib qolgan bo'lsa), oxirgi chora:
kill -9 2388Diqqat:
kill -9ni odat qilmang. Dastur ma'lumotlarni diskka yozib ulgurmaydi — yarim yozilgan fayl yoki buzilgan baza qolishi mumkin. Avval oddiykill, bir necha soniya kuting, faqat keyin-9.
Maslahat: Linux va macOS'da jarayonni PID'siz, nomi bo'yicha ham to'xtatish mumkin:
pkill sleep— nomidasleepbor barcha jarayonlarga SIGTERM yuboradi. Qulay, lekin ehtiyot bo'ling:pkill nodesizning hamma Node dasturlaringizni birdaniga to'xtatadi. Git Bash'dapkillyo'q.
Tekshirib ko'ring: Server dasturi foydalanuvchi buyurtmasini bazaga yozayotgan paytda uni to'xtatish kerak.
killyokikill -9— qaysi biri xavfsizroq va nega?
Javob
kill (SIGTERM). Dastur signalni oladi va joriy yozuvni tugatib, toza yopiladi. kill -9 uni yozuvning o'rtasida uzib qo'yishi mumkin — buyurtma yarim saqlanib qoladi.
4. Oldingi va orqa fon
4.1 & — orqa fonda ishga tushirish
Odatda buyruq oldingi fonda (foreground) ishlaydi: u tugaguncha prompt qaytmaydi. Buyruq oxiriga & qo'yilsa, u orqa fonda (background) ishlaydi va prompt darhol qaytadi:
sleep 300 &[1] 2388[1] — shell bergan vazifa raqami (job number), 2388 — PID. Endi terminal bo'sh, sleep esa orqada ishlayapti.
4.2 jobs, fg, kill %1
jobs[1]+ Running sleep 300 &jobs — shu terminaldan orqa fonga yuborilgan vazifalar. Ular bilan ishlash:
| Buyruq | Nima qiladi |
|---|---|
fg |
Oxirgi vazifani oldingi fonga qaytaradi |
fg %1 |
1-vazifani oldingi fonga qaytaradi |
bg |
Pauzadagi vazifani orqa fonda davom ettiradi |
kill %1 |
1-vazifani to'xtatadi (PID shart emas) |
%1 dagi % — "bu PID emas, vazifa raqami" degan belgi.
4.3 Ctrl + Z — tuzoq
Ctrl + Z dasturni to'xtatmaydi — faqat pauzaga qo'yadi va orqa fonga suradi:
^Z
[1]+ Stopped sleep 300Stopped — "to'xtatilgan", lekin o'chirilmagan. Jarayon xotirada turibdi va o'zi egallagan hamma narsani — xotira, fayllar, port — ushlab turibdi. fg bilan qaytarsangiz, qolgan joyidan davom etadi.
Boshlovchilar Ctrl + Z ni "chiqish" deb o'ylaydi (ba'zi dasturlarda u "bekor qilish"). Terminalda esa bu — 1-bo'limdagi EADDRINUSE ning eng ko'p uchraydigan sababi.
Qoida: dasturni to'xtatish — Ctrl + C. Tasodifan Ctrl + Z bosgan bo'lsangiz: fg yozing, keyin Ctrl + C.
Tekshirib ko'ring:
jobsnatijasida[1]+ Stopped node server.jsturibdi. Server so'rovlarga javob beradimi? Port bo'shmi?
Javob
Ikkalasiga ham "yo'q". Stopped — jarayon pauzada: u so'rovlarga javob bermaydi, lekin portni ushlab turibdi. Yangi server shu portda ishga tusha olmaydi. Yechim: fg, keyin Ctrl + C — yoki kill %1.
5. Port nima?
Portlarni internet qismida batafsil o'rganamiz. Hozir bitta o'xshatish yetadi.
Kompyuter — ko'p qavatli biznes-markaz. Uning manzili bitta (IP manzil). Ichida esa raqamlangan xonalar bor — portlar. Tarmoqdan kelgan har bir so'rov manzilga emas, aniq xonaga keladi: "3000-xonaga". Port — 0 dan 65535 gacha son, u tarmoq xabari kompyuterdagi qaysi dasturga tegishli ekanini ko'rsatadi.
Asosiy qoida: bitta portni bir vaqtda faqat bitta dastur egallay oladi (dasturchilar "tinglaydi" — listen deyishadi). Xonada ijarachi o'tirgan bo'lsa, ikkinchisi kira olmaydi.
Dasturchilar ko'p uchratadigan portlar:
| Port | Odatda kim |
|---|---|
3000 |
React, Next.js, Express loyihalari |
5173 |
Vite loyihalari |
5432 |
PostgreSQL bazasi |
80 / 443 |
Veb-saytlar (HTTP / HTTPS) |
Bu nomlarning hammasini kursda o'rganamiz — hozir shunchaki "har xil dastur — har xil port" ekanini ko'ring.
6. EADDRINUSE: band portni bo'shatish
6.1 Xatoni o'qish
Node.js (keyinroq o'rnatasiz) band portda server ochmoqchi bo'lsa, shunday yozadi (qisqartirilgan):
Error: listen EADDRINUSE: address already in use :::3000
code: 'EADDRINUSE',Bo'laklaymiz:
listen— "tinglashni boshlash" (portni egallash) amali.EADDRINUSE— Error ADDRess IN USE: "manzil band" xatosining kodi.address already in use— "manzil allaqachon ishlatilmoqda".:::3000— qaysi manzil. Uni::+:+3000deb o'qing:::— "kompyuterning barcha tarmoq manzillari" (yangi IPv6 yozuvida), o'rtadagi:— manzil bilan portni ajratuvchi,3000— port.
Boshqa dasturlar xuddi shu muammoni boshqa so'zlar bilan aytadi: Port 3000 is already in use, Address already in use. Ma'nosi bir.
6.2 Uch qadamli yechim
flowchart TD
A["EADDRINUSE :::3000"] --> B["1. Portni kim egallagan?<br/>lsof yoki netstat"]
B --> C["2. PID ni oling"]
C --> D{"Bu sizning eski<br/>serveringizmi?"}
D -- "ha" --> E["3. To'xtating:<br/>kill yoki Stop-Process"]
D -- "yo'q, begona dastur" --> F["Serverni boshqa<br/>portda ishga tushiring"]6.3 macOS, Linux va WSL'da: lsof
lsof (list open files — ochiq fayllar ro'yxati) — port kimda ekanini ko'rsatadi. -i :3000 — "3000-port bilan bog'liqlarini ko'rsat":
lsof -i :3000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 51234 ali 23u IPv6 0x9f2c... 0t0 TCP *:3000 (LISTEN)Bizga ikkita ustun kerak: COMMAND — node (dastur), PID — 51234. (LISTEN) — "shu portni tinglayapti". Endi:
kill 51234Hech narsa chiqmasa — hammasi yaxshi. lsof -i :3000 ni qayta yozing: bo'sh natija — port bo'sh.
lsof Ubuntu'da ba'zan o'rnatilmagan bo'ladi. Unda: sudo apt install lsof, yoki Linux'da tayyor turadigan muqobil — ss -ltnp | grep 3000. ss (socket statistics — ulanishlar statistikasi) flaglari: l — faqat tinglayotganlar, t — TCP ulanishlar, n — nomlar emas, raqamlar, p — egasi (dastur nomi va PID). Boshqa foydalanuvchining jarayoni bo'lsa, egasini ko'rish uchun sudo kerak bo'ladi.
6.4 Windows'da: netstat va taskkill
Windows'da lsof yo'q (Git Bash'da ham). O'rniga netstat -ano: -a — hamma ulanishlar, -n — raqamlar bilan, -o — egasining PID'i bilan. Uni findstr (Windows'dagi grep) bilan filtrlaymiz. Bu buyruq PowerShell'da ham, Git Bash'da ham ishlaydi:
netstat -ano | findstr :3000 TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 8316
TCP [::]:3000 [::]:0 LISTENING 8316(Bo'sh joylar qisqartirildi.) LISTENING — tinglayapti, oxirgi ustun — Windows PID'i: 8316. Ikkita qator — bitta dastur ikki xil manzil turida tinglayapti, PID bir xil.
PID'ni to'xtatish:
- PowerShell'da:
Stop-Process -Id 8316 - cmd yoki PowerShell'da:
taskkill /PID 8316 /F - Git Bash'da:
taskkill //PID 8316 //F— ikkita chiziq bilan! Sababi xatolar bo'limida.
PowerShell'da portni tekshirishning qulayroq usuli ham bor:
Get-NetTCPConnection -LocalPort 3000 -State ListenNatijadagi OwningProcess ustuni — PID. Bu buyruqlar tilini PowerShell darsida o'rganamiz.
6.5 Bitta buyruq: npx kill-port
Node.js o'rnatilgan bo'lsa, hamma tizimda bir xil ishlaydigan qisqa yo'l bor:
npx kill-port 3000npx — internetdan kichik dasturni yuklab, bir marta ishga tushiradigan vosita (npx darsida to'liq ko'ramiz). kill-port shu port egasini o'zi topadi va to'xtatadi. Qulay — lekin nima bo'layotganini tushunish uchun avval qo'lda qilishni o'rganing.
6.6 Ikkinchi yo'l: boshqa port
Ba'zan portni boshqa, kerakli dastur egallagan bo'ladi — masalan, boshqa loyihangiz. Uni o'chirish shart emas. Yangi serverni boshqa portda ishga tushirasiz. Muhit o'zgaruvchilari darsidagi bir martalik o'zgaruvchi aynan shu uchun: PORT=3001 npm start.
Tekshirib ko'ring:
netstat -ano | findstr :5432natijasidaLISTENING 4120chiqdi. Tasklist'da 4120 —postgres.exe. Siz Node serveringizni 5432-portda ochmoqchi edingiz. Nima qilasiz?
Javob
postgres.exe ni o'chirmaysiz — bu ma'lumotlar bazasi, u kerak. Adashgan — sizning serveringiz: 5432 — PostgreSQL'ning odatiy porti. Serverni boshqa portda (masalan 3000) ishga tushirasiz.
7. Ko'p uchraydigan xatolar
7.1 Terminalni yopdim — server baribir ishlayapti
VS Code terminalini "axlat qutisi" tugmasi bilan emas, boshqa yo'l bilan yopdingiz yoki server orqa fonda (&) qoldi. Oyna yo'q, lekin jarayon yashayapti va portni ushlab turibdi. Tuzatish: 6-bo'limdagi qadamlar — portdan PID'ni topib, to'xtatish.
7.2 Git Bash'da taskkill /PID
taskkill /PID 8316 /FERROR: Invalid argument/option - 'C:/Program Files/Git/PID'."Noto'g'ri argument: C:/Program Files/Git/PID". Qayerdan paydo bo'ldi bu yo'l? Git Bash / bilan boshlangan so'zni Linux'dagi yo'l deb o'yladi va uni Windows yo'liga "tarjima" qildi: /PID → C:/Program Files/Git/PID. Sizda yo'l Git qayerga o'rnatilganiga qarab boshqacha bo'ladi. Tuzatish: Git Bash'da Windows flaglarini ikkita chiziq bilan yozing: taskkill //PID 8316 //F. Yoki bu buyruqni PowerShell'da bajaring.
7.3 Git Bash'dagi kill Windows PID'ini tanimaydi
netstat bergan 8316 — Windows PID'i. Git Bash'dagi kill esa o'z ichki raqamlari bilan ishlaydi (ps dagi PID ustuni, WINPID emas). kill 8316 ko'pincha No such process beradi. Tuzatish: Windows PID'i uchun — taskkill //PID 8316 //F yoki PowerShell'da Stop-Process -Id 8316.
7.4 Birinchi urinishda kill -9
Ishlaydi, lekin xavfli: dastur ma'lumotlarini saqlamay o'ladi. Qoida: kill → bir necha soniya kutish → kerak bo'lsa kill -9.
7.5 Tizim jarayonini o'ldirish
netstat ro'yxatida svchost.exe, System yoki postgres kabi nomlarni ko'rsangiz — ularni to'xtatmang. Ular Windows'ning yoki boshqa dasturning qismi. Faqat o'zingiz ishga tushirgan va taniydigan jarayonni (node, python) to'xtating.
8. Mashqlar
1-mashq (oson): Orqa fon
Terminalda (Git Bash, WSL yoki macOS) bajaring va har qadamdan keyin natijani kuzating:
sleep 200 &— ekranda kvadrat qavs ichida vazifa raqami chiqadi: . Yonida — PID.jobs— holati (inglizcha bitta so'z): .kill %1, keyin yanajobs.
Yechim
sleep 200 &
jobs
kill %1
jobs[1] 2388
[1]+ Running sleep 200 &
[1]+ Terminated sleep 200& — orqa fonda ishga tushirdi. jobs — Running (ishlayapti). kill %1 SIGTERM yubordi. Shell bu haqda bir marta Terminated (tugatildi) deb xabar beradi: yo darhol keyingi prompt oldidan, yo keyingi jobs natijasida. Xabar chiqqandan keyin vazifa ro'yxatdan o'chadi — yana bir marta jobs yozsangiz, hech narsa chiqmaydi. PID raqami sizda boshqacha bo'ladi.
2-mashq (o'rta): Ctrl + Z tuzog'i
sleep 200ni oddiy (oldingi fonda) ishga tushiring.Ctrl + Zbosing. Ekranda nima chiqdi?jobs— holat qanday?- Jarayonni to'liq to'xtating.
Yechim
^Z
[1]+ Stopped sleep 200jobs ham Stopped ko'rsatadi: jarayon tirik, faqat pauzada. To'xtatishning ikki yo'li:
fg— sleep oldingi fonga qaytadi, keyin Ctrl + C bosasiz. Yoki bitta buyruq bilan: kill %1. Pauzadagi jarayon ham signalni oladi.
Bu mashqni Git Bash'da emas, WSL, macOS yoki Linux'da qilgan ma'qul — Git Bash'da Ctrl + Z ba'zi dasturlarda boshqacha ishlaydi.
3-mashq (qiyin): Port tergovi
Windows'da hozir ham ba'zi portlar tinglanib turadi — masalan, 135-port. Buni faqat ko'rish uchun (hech narsani to'xtatmang!):
- 135-portni qaysi PID tinglayotganini toping.
- Shu PID qaysi dasturga tegishli ekanini aniqlang.
macOS yoki Linux'da bo'lsangiz: lsof -i -P | grep LISTEN bilan tinglayotgan dasturlarni ko'ring va bittasining nomi va PID'ini yozing.
Ishora: Windows'da dastur nomini PID bo'yicha tasklist /FI "PID eq 1234" topadi (Git Bash'da — //FI). FI — filter.
Yechim
PowerShell'da:
netstat -ano | findstr :135
tasklist /FI "PID eq 1952" TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1952
TCP [::]:135 [::]:0 LISTENING 1952
Image Name PID Session Name Session#
========================= ======== ================ ===========
svchost.exe 1952 Services 0(PID sizda boshqacha bo'ladi; tasklist chiqishi qisqartirildi.) 135-portni svchost.exe — Windows'ning xizmat jarayoni tinglaydi. Bu tizim jarayoni — uni to'xtatmaymiz. Mashqning maqsadi — zanjirni o'rganish: port → PID → dastur nomi. EADDRINUSE da ham aynan shu zanjir.
PowerShell'da bir qadamda:
Get-Process -Id (Get-NetTCPConnection -LocalPort 135)[0].OwningProcess9. Real ishda
- Har kungi ish. Frontend dasturchi kuniga bir necha marta dev-serverni ishga tushiradi va to'xtatadi.
EADDRINUSEni bir daqiqada hal qila olish — oddiy, lekin qadrlanadigan ko'nikma. - Qotib qolgan dastur. VS Code yoki brauzer javob bermay qoldi —
ps/tasklistbilan topib, to'xtatish. - Serverda. Serverda grafik Task Manager yo'q. Qaysi dastur protsessorni 100% band qilganini
topbilan topish, keyinkill— DevOps'ning asosiy ishlaridan. Serverdagi jarayonlarni Linux server qismida chuqurroq o'rganamiz. - Toza yopilish. Server dasturlari SIGTERM'ni "ushlab", ochiq ulanishlarni yopib chiqadigan qilib yoziladi. Shuning uchun
kill(SIGTERM) vakill -9farqi real kodda ham muhim. - Intervyu. "
killvakill -9farqi?", "Port band bo'lsa nima qilasiz?" — Linux va backend bo'yicha klassik savollar.
Xulosa
- Jarayon — ishlab turgan dastur, PID — uning raqami. Ko'rish:
ps,ps aux,top; Windows'datasklistyoki Task Manager. Ctrl + C— to'xtatadi (SIGINT).Ctrl + Z— faqat pauza: jarayon va uning porti qoladi.kill PID— iltimos bilan (SIGTERM);kill -9 PID— majburan (SIGKILL), faqat oxirgi chora.&— orqa fonda ishga tushirish;jobs,fg,kill %1— vazifalarni boshqarish.- Port — dasturning "xona raqami"; bitta portda faqat bitta dastur.
EADDRINUSE:lsof -i :3000yokinetstat -ano | findstr :3000→ PID →kill/Stop-Process.
Keyingi dars: PowerShell asoslari va bash bilan farqi — Windows'ning o'z shell'i qanday ishlashini, Stop-Process kabi buyruqlar qanday tuzilganini va nega u matn emas, obyektlar bilan ishlashini ko'ramiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!