Linuxda ma'lum bir portda ishlaydigan jarayonni qanday o'ldirish mumkin?

Men tomcat /bin katalogidagi ./shutdown.sh yordamida tomcatni yopishga harakat qildim. Ammo server to'g'ri yopilmagani aniqlandi. Shunday qilib, men qayta ishga tushira olmadim
Mening tomcatim 8080 portida ishlamoqda.

Men 8080 da ishlaydigan tomcat jarayonini o'ldirmoqchiman. Qaysi jarayonni o'ldirishni tanlash uchun birinchi navbatda ma'lum bir portda (8080) ishlaydigan jarayonlar ro'yxatiga ega bo'lishni xohlayman.


person veer7    schedule 20.07.2012    source manba
comment
Portda tinglash jarayonini o'chirish uchun qobiq skriptining mumkin bo'lgan nusxasi 3000?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.10.2014


Javoblar (31)


Bu fuser 8080/tcp sizga ushbu portga bog'langan jarayonning PID kodini chop etadi.

Va bu fuser -k 8080/tcp bu jarayonni o'ldiradi.

Faqat Linuxda ishlaydi. lsof -i4 (yoki IPv6 uchun 6) dan foydalanish yanada universaldir.

person nudzo    schedule 21.07.2012
comment
bu 8080 ga ulangan rozetkani ham yopadimi? - person fer y; 28.01.2014
comment
Albatta, jarayon tugagach, barcha fayl identifikatorlari yopiladi. - person nudzo; 29.01.2014
comment
U portni to'g'ri yopmaydi. Asosiy jarayon o'ldirilgandan so'ng port TIME_WAIT holatiga o'tkaziladi. Operatsion tizim taxminan 60 soniyadan so'ng portni butunlay yopadi. Bu portni kamida 60 soniya davomida qayta ishlata olmaysiz degan ma'noni anglatadi (agar siz rozetkaga qayta foydalanish imkoniyatini bermasangiz). - person Mark Lakata; 04.09.2015
comment
Darvinda fuser ning boshqa versiyasidan foydalanish kerak. Faqat faylni oladi, -k ni qo'llab-quvvatlamaydi. - person a p; 15.11.2016
comment
'fuser -k -n tcp 8080' ham jarayonni o'ldiradi - person Hesham Yassin; 09.02.2017
comment
@dbliss fuser psmisc ning bir qismidir. Agar siz fuser: command not found ni olsangiz, psmisc ni o'rnating. CentOS/RHEL 7 uchun sudo yum install psmisc ni ishga tushiring - person Tom; 10.01.2019

8080 portini tinglash jarayonini ro'yxatga olish uchun:

lsof -i:8080

8080 portini tinglayotgan har qanday jarayonni o'chirish uchun:

kill $(lsof -t -i:8080)

yoki ko'proq zo'ravonlik bilan:

kill -9 $(lsof -t -i:8080)

(-9 SIGKILL - terminate immediately/hard kill signaliga mos keladi: O‘ldirish signallari ro‘yxati va O'ldirish buyrug'idagi -9 parametrining maqsadi nima?. Agar kill ga hech qanday signal ko'rsatilmagan bo'lsa, TERM signali, ya'ni -15 yoki soft kill yuboriladi, bu ba'zan bajarilmaydi. jarayonni o'ldirish uchun etarli.).

person Franck Dernoncourt    schedule 15.09.2015
comment
o'ldirish: foydalanish: o'ldirish [-s sigspec | -n belgisi | -sigspec] pid | jobspec ... yoki kill -l [sigspec] Men sizning buyruqlaringizni bajarganimda shunday olaman - person Sudhir Belagali; 05.04.2017
comment
@SudhirBelagali buni super foydalanuvchi sudo bilan qildingiz - person Marcel Djaman; 11.05.2017
comment
Mac kompyuterimda ham ishladim - person asherbar; 07.01.2018
comment
Shuni qo'shimcha qilmoqchimanki, ba'zida sizda jarayon identifikatorini ko'rish uchun ruxsatingiz yo'q, bu holda siz sudo lsof -i:8080 ni bajarishingiz kerak. - person Akavall; 19.08.2018
comment
nima uchun ikkinchi maslahatlar zo'ravonroq? - person Webwoman; 17.09.2018
comment
@Webman yanada zo'ravonlik bilan u mening veb-brauzerimni yaxshi o'ldiradi degan ma'noni anglatadi :( Mana Gal Brachaning eng yaxshi yechimi: kill -9 $(lsof -t -i: 3000 -sTCP: LISTEN) - person Russo; 20.09.2018
comment
@Webman -9 SIGKILL - terminate immediately/hard kill ga mos keladi: O‘ldirish signallari ro‘yxati va O'ldirish buyrug'idagi -9 variantining maqsadi nima?) - person Franck Dernoncourt; 20.09.2018
comment
Bunga asoslanib, sudo: killport() {sudo kill -9 $(sudo lsof -t -i:${1} -sTCP:LISTEN)} va keyin killport 8080 bilan - person Nicolas Marshall; 08.01.2019

Buyruqdan foydalaning

 sudo netstat -plten |grep java

grep java tomcat sifatida ishlatiladi, java jarayonlari sifatida foydalanadi.

U port raqami va jarayon identifikatori bilan jarayonlar ro'yxatini ko'rsatadi

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

/java dan oldingi raqam jarayon identifikatoridir. Endi jarayonni o'chirish uchun kill buyrug'idan foydalaning

kill -9 16085

-9 jarayon kuch bilan o'ldirilganligini bildiradi.

person veer7    schedule 20.07.2012
comment
netstat orqali jarayon nomlarini olish uchun root privilegiyalari kerak bo'lishi mumkinligini qo'shishingiz mumkin. - person Jonas Schäfer; 20.07.2012
comment
@JonasWielicki siz root huquqlariga ega bo'lmaganlarni ko'rishingiz mumkin. - person dbliss; 09.08.2016
comment
Menga netstat uchun ildiz huquqlari kerak edi. Jarayon nimadan kelib chiqqanligini bilishning bir usuli bormi? Aytishim mumkinki, men barcha ilovalarni yopganman, lekin bu terminal oynasidan bo'lgan bo'lishi mumkin, u erda men beixtiyor jarayonlarni fon vazifasiga surdim. Ehtimol, avval barcha jarayonlarni ko'rish uchun terminalning "ps" buyrug'ini ishlatishim kerak edi ... - person JesseBoyd; 12.10.2017
comment
sudo netstat -plten | grep :8080 ilovani bilmaganingizda ham ishlaydi. Bu lsof -i men uchun topa olmagan ruby ​​jarayonini topdi. - person MikeF; 01.10.2020

1-variant Muayyan portda faqat LISTEN-ni o'chirish uchun bitta layner:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)`

2-variant Agar sizda npm oʻrnatilgan boʻlsa, siz ham ishga tushirishingiz mumkin

npx kill-port 3000
person Gal Bracha    schedule 22.01.2017
comment
Menimcha, bu eng yaxshi javob bo'lishi kerak. Rahmat @Gal Bracha - person Sam Kah Chiin; 22.02.2018
comment
Bu eng yaxshi yechim, chunki u mening brauzerimni ham o'ldirmaydi! - person Russo; 20.09.2018
comment
Ushbu javobga asoslanib, men ~/.bashrc: killp() { kill -9 $(lsof -t -i:"$1" -sTCP:LISTEN) } funksiyasini killp 3000 kabi ishlatish uchun yaratdim. ({ } uchun yangi qatorlarni qo'shishni unutmang) - person Arthur; 06.08.2020

lsof buyrug'idan foydalanishingiz mumkin. Bu erdagi kabi port raqami 8090 bo'lsin

lsof -i:8090

Ushbu buyruq ushbu portdagi ochiq jarayonlar ro'yxatini qaytaradi.

Biror narsa…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

Portni bo'shatish uchun undan foydalanib jarayonni o'chiring (jarayon identifikatori 75782)…

kill -9 75782

Bu men uchun ishladi. bu yerda asl postdan havola: havola

person Kop4lyf    schedule 11.02.2015
comment
jarayonni kuch bilan o'ldirish uchun -9 like kill -9 75782 dan foydalanishingiz kerak; chunki ba'zida bir nechta jarayonlar shunchaki o'ldirish bilan o'ldirilmaydi - person veer7; 25.02.2015

Bitta layner

kill -9 $(lsof -t -i tcp:8080)

Bu erda tushuntirish: lsof va kill kombinatsiyasidan foydalaning

root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

pid ni tanlang va kill dan foydalaning

kill 23672
person dlmeetei    schedule 26.11.2019

Agar siz 8080 port raqamida ishlaydigan jarayonni o'chirmoqchi bo'lsangiz, avval 8080 port jarayonining identifikatsiya raqamini (PID) topib, keyin uni o'ldirishingiz kerak. 8080 port raqamini PID topish uchun quyidagi buyruqni bajaring:

sudo lsof -t -i:8080

Bu yerga,

  • sudo - administrator imtiyozlarini so'rash buyrug'i (foydalanuvchi identifikatori va parol).
  • lsof - fayllar ro'yxati (shuningdek, tegishli jarayonlarni ro'yxatga olish uchun ishlatiladi)
  • -t - faqat jarayon identifikatorini ko'rsatish
  • -i - faqat internetga ulanish jarayonini ko'rsatish
  • :8080 - faqat ushbu port raqamidagi jarayonlarni ko'rsatish

Shunday qilib, siz quyidagi buyruq yordamida PID-ni osongina o'ldirishingiz mumkin:

sudo kill -9 <PID>

Bu yerga,

  • o'ldirish - jarayonni o'ldirish buyrug'i
  • -9 - kuch bilan

Quyidagi buyruq yordamida ma'lum bir portdagi jarayonni o'ldirish uchun bitta buyruqdan foydalanishingiz mumkin:

sudo kill -9 $(sudo lsof -t -i:8080)

Qo'shimcha ma'lumot uchun quyidagi havolani ko'rishingiz mumkin Linuxdagi ma'lum bir portdagi jarayonni qanday o'ldirish mumkin

person Mahfuz    schedule 18.05.2018
comment
rahmat do'stim. sudo kill -9 $(sudo lsof -t -i:8080) men uchun ishlagan - person Junaid; 31.12.2018
comment
Ajoyib, bu men uchun ishlagan buyruq, Ubuntu - person Jose Mhlanga; 08.04.2021

Muayyan portdagi barcha jarayonlarni o'ldirishning eng yaxshi usuli;

kill -9 $(sudo lsof -t -i:8080)
person Berkay Kırmızıoğlu    schedule 04.12.2019
comment
sudo parolni so'ramaydi - person Kuldeep Yadav; 21.04.2020

Bu <port_number> da ishlaydigan hamma narsaning jarayon identifikatorlarini stdout uchun chop etadi:

fuser -n tcp <port_number> 

Shuningdek, u stderr-ga ba'zi narsalarni chop etadi, shuning uchun:

fuser -n tcp <port_number> 2> /dev/null

Keyin biz ushbu jarayon identifikatorlarini kill buyrug'iga taqdim etishimiz mumkin:

sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

Agar siz buni juda ko'p qilsangiz, buni funktsiyaga ham qo'yishingiz mumkin:

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}
person Brian Peterson    schedule 27.09.2013

Muayyan portda ishlaydigan xizmat pidini bilish uchun:

netstat -tulnap | grep :*port_num*

siz ushbu jarayonning tavsifini olasiz. Endi kill yoki kill -9 pid dan foydalaning. Osonlik bilan o'ldirilgan.

e.g

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 

Hozir:

kill -9 1880

Barcha buyruqlarni root sifatida bajarishni unutmang

person Sanjay s.    schedule 12.08.2014

Vazifaning PID-ni oling va uni o'ldiring.

lsof -ti:8080 | xargs kill
person Rahul Garg    schedule 29.11.2018
comment
Javobingiz uchun rahmat. Mac OS da juda muammosiz ishlaydi. Siz eng zo'rsiz. Faqat yuqoriga ovoz berish. - person AMIC MING; 29.11.2019
comment
lsof -ti:8080-8089 | xargs kill kabi port diapazonlari bilan ham yaxshi ishlaydi. - person dvlsg; 06.03.2020

Avval siz bajarishingiz kerak (port raqamingiz bilan almashtiring):

fuser -k 3000/tcp

Bu portni bo'shatadi. Yuqoridagi buyruqni bajarganingizdan so'ng:

service docker restart

Va sizning muammoingiz hal qilindi.

person Anshuman Bardhan    schedule 21.07.2020
comment
ENG YAXSHI JAVOB SHU YERDA! - person Michael Paccione; 27.01.2021
comment
yaxshi javob rahmat, bu men uchun ham ishlaydi - person perymerdeka; 01.03.2021

shunday harakat qilib ko'ring,

 sudo fuser -n tcp -k 8080
person Adil Abbasi    schedule 26.06.2015

Port raqamini tanlang va quyida ko'rsatilgandek netstat buyrug'ida grepni qo'llang

netstat -ap | grep :7070

Konsol chiqishi

tcp 0 0 :::7070 :::* TINGLASH 3332/java

PID ( Jarayon identifikatsiya raqami ) asosida xizmatni o'chirib qo'ying

kill -9 3332
person Lova Chittumuri    schedule 06.08.2019

  1. lsof -i tcp:8000 Bu buyruq 8000 portida ishlayotgan jarayon haqidagi ma'lumotlarni ko'rsatadi

  2. kill -9 [PID] Ushbu buyruq jarayonni o'ldiradi

person Nandhitha Ramaraj    schedule 16.12.2015
comment
Men buni bir necha hafta oldin tasodifan pastga tushirganimni payqadim, agar javobingizni biroz tahrir qilsangiz, uni olib tashlashim mumkin - person Robin-Hoodie; 11.01.2018

Linux: Agar siz portni bilsangiz, ushbu buyruqdan foydalanishingiz mumkin:

netstat -plten | grep LISTEN | grep 8080

AIX:

netstat -Aan | grep LISTEN | grep 8080

Keyin birinchi ustunni olasiz (masalan: f100050000b05bb8) va quyidagi buyruqni bajaring:

rmsock f100050000b05bb8 tcpcb

o'ldirish jarayoni.

person ben rhouma moez    schedule 12.08.2014

Linux: Agar siz portni bilsangiz, avval ushbu buyruqning PID kodini topishingiz mumkin:

netstat -tulpn 

misol: -

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

Keyin siz o'ldirish jarayonini olasiz. quyidagi buyruqni bajaring:

o'ldirish -9 PID

Misol: -

o'ldirish -9 15986

person Kundan Kumar    schedule 07.03.2018

Siz tizimdagi barcha ishlayotgan portlar ro'yxatini uning tafsilotlari (pid, manzil va h.k.) bilan bilishingiz mumkin:

netstat -tulpn

Quyidagi buyruqda port raqamini kiritish orqali muayyan port raqamining tafsilotlarini bilishingiz mumkin:

sudo netstat -lutnp | grep -w '{port_number}'

masalan: sudo netstat -lutnp | grep -w '8080' Tafsilotlar quyidagicha taqdim etiladi:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

agar siz jarayonni pid yordamida o'chirmoqchi bo'lsangiz, u holda : kill -9 {PID}

agar siz port raqamidan foydalanib jarayonni o'chirmoqchi bo'lsangiz : fuser -n tcp {port_number}

Agar biron biriga kira olmasangiz sudo dan foydalaning.

person YAP    schedule 14.03.2019

8080 port raqamini PID topish uchun quyidagi buyruqni bajaring:

sudo lsof -t -i: 8080

Endi siz quyidagi buyruq yordamida PID-ni osongina o'ldirishingiz mumkin:

sudo kill -9

Quyidagi buyruq yordamida ma'lum bir portdagi jarayonni o'ldirish uchun bitta buyruqdan foydalanishingiz mumkin:

sudo kill -9 $(sudo lsof -t -i: 8000)

person RajuS    schedule 17.06.2020

kill -9 `fuser 8080/tcp|xargs -n 1`, bu buyruqlar TCP ulanishi bilan 8080 portida tinglovchi jarayonni ham o'ldiradi

person Harshit Garg    schedule 22.05.2017

Shunchaki ushbu buyruqni bajaring. portnumber ni port bilan almashtirishni unutmang;)

  kill -9 $(sudo lsof -t -i:portnumber)
person monica    schedule 13.06.2020
comment
Ko'pincha Mac-da sudo kerak emas. - person Aditya Parmar; 14.07.2020

sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp

Natija: 80/tcp: 1858 1867 1868 1869 1871

Jarayonni birma-bir o'ldiring

o'ldirish - 9 1858

person Fadid    schedule 04.06.2018

Bu Windows uchun yechim:

C:\Users\Niroshan>netstat -ano|findstr "PID :8080"

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264

taskkill /pid 18264 /f
person Niroshan Ratnayake    schedule 14.07.2020
comment
Savol Linux haqida so'raladi. - person Robert; 14.07.2020

Men cheklangan Linux vositalariga ega Yocto Linux tizimida ishlayapman. Men ma'lum bir portdan foydalanadigan jarayonni o'ldirmoqchi edim (1883).

Birinchidan, qaysi portlarni tinglayotganimizni ko'rish uchun men quyidagi buyruqdan foydalandim:

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

Keyin men 1883-port yordamida jarayon nomini quyidagi tarzda topdim:

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

Yuqorida ko'rib turganimizdek, bu /usr/sbin/mosquitto dasturi 1883 portidan foydalanadi.

Nihoyat, men jarayonni o'ldirdim:

root@root:~# systemctl stop mosquitto

Men systemctl dan foydalandim, chunki bu holda bu tizim xizmati edi.

person Daniel Jonsson    schedule 05.05.2020

  1. avval jarayonni tekshiring netstat -lt
  2. jarayon identifikatorini tekshirish fuser <port number>/tcp
  3. kill <process id> portida ishlaydigan jarayonni o'ldirish
person Gunjan Paul    schedule 24.05.2020

Bu 80-portda ishlaydigan dasturlarni o'ldiradi

sudo fuser -k 80/tcp
person Asad Ullah    schedule 17.06.2021

Git Bash bilan boshqa usul:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
person Lucas Moyano Angelini    schedule 09.02.2019

Mening ishimda cent os taklif qilingan javobda ba'zi muammoga ega. Shunday qilib, men quyidagi yechimdan foydalandim:

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill
person Kamesh Jungi    schedule 10.02.2020

@veer7 aytganlariga asoslanish uchun:

Agar siz portda nima borligini bilmoqchi bo'lsangiz, uni o'ldirishdan oldin buni qiling.

$ sudo netstat -plten |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

"PS" dan va netstat hisobot bergan jarayonning raqamidan foydalaning

person JesseBoyd    schedule 12.10.2017

Portdagi xizmat javob bermasa, jarayonni qanday o'chirish mumkin

timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi

Nima qiladi

  1. Telnetdan chiqish uchun "taym-out" ni bir soniyadan boshlang
  2. ' 2›&1 | ' quvuri xato xabari chiqmasdan
  3. Agar xato xabarida "Muvaffaqiyatsiz" bo'lsa, jarayonni blokirovka qilish porti 8080ni o'chirish uchun kodni ishga tushiring.

Bu faylga joylashtirilishi va "sudo crontab" dan muntazam ishlashi mumkin.

person Punnerud    schedule 31.08.2020

Windowsda bu netstat -ano | grep "8080" bo'ladi va biz quyidagi xabarni olamiz TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

BIZ taskkill /F /PID 10076 yordamida PIDni o'ldirishimiz mumkin

person Chaklader    schedule 28.09.2016
comment
Savol aniq Linux yordamini so'raydi; Windows emas. - person babycakes; 30.12.2016