TCP / IP bağlantı noktasını boşaltıyor musunuz?


146

netstat -tulnap hangi portların kullanımda olduğunu gösterir. Linux'ta bir port nasıl boşaltılır?

Yanıtlar:


214

Diğerlerinin söylediği gibi, o bağlantı noktasını dinleyen tüm işlemleri öldürmeniz gerekir. Bunu yapmanın en kolay yolu kaynaştırıcı (1) komutunu kullanmaktır. Örneğin, 80 numaralı bağlantı noktasında http isteklerini dinleyen tüm işlemleri görmek için (root olarak çalıştır veya sudo kullan):

# fuser 80/tcp

Onları öldürmek istiyorsanız, sadece -k seçeneğini ekleyin.


1
Limana bir istek göndermenin de temizlediğini gördüm (yine de linux uzmanı değilim)
Matej

1
Kaynaştırıcıyı Debian'a kurmak için: sudo apt-get install psmisc ( bitflop.com/document/107 )
Korneel

1
Çalıştı, ama psmisc'i CentOs 7 ( sudo yum install psmisc) üzerine de kurmak zorunda kaldım
Marlon Bernardes

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Hanynowsky

76

Linux'ta belirli bir bağlantı noktasını öldürmek için aşağıdaki komutu kullanın

sudo fuser -k Port_Number/tcp

Port_Number'ı dolu portunuzla değiştirin.


6
Bu aslında limanın kendisini değil, limanı açan süreci öldürür.
vinayc

16

İhtiyacınız olan bağlantı noktasında bulunan bağlantıyı öldürmek için tcpkill( dsniffpaketin bir parçası ) kullanabilirsiniz:

sudo tcpkill -9 port PORT_NUMBER

11
bu sadece asılı$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Anentropik

16

Terminal tipinde:

netstat -anp|grep "port_number"

Bağlantı noktası ayrıntılarını gösterecektir. Son sütuna git. Bu biçimde olacaktır. Örneğin: - PID / java

sonra yürütün:

kill -9 PID. Worked on Centos5

Mac için:

lsof -n -i :'port-number' | grep LISTEN

Örnek Yanıt:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

ve ardından yürütün:

kill -9 PID 

Macbook üzerinde çalıştı


Açıkçası bu, PID sütunu bu bağlantı noktası için boşsa işe yaramaz
Anentropic

1
... ve bu süreci görme izniniz yoksa olur ... sudo netstataslında PID'leri görmeye çalışın :)
Anentropik

Macun cli ile amazon ec2 örneğindeki bir limanı öldürmeye çalışıyordum. Sonsuza kadar çalışan bir işlem olmadığını, ancak bağlantı noktasının (açısal bir uygulama için 4200) hala açık olduğunu söyledi.Bu benim için çalışan tek komut.
vtechmonkey

9

"netstat --programs"Komut Sen kökünü varsayarak size süreç bilgi verecektir. O zaman sadece can sıkıcı :-) tekrar iyi başlayabilir "rahatsız edici" süreci öldürmek zorunda kalacak.

Burada gerçekten neyi başarmaya çalışıyorsunuz? Çözümler, bu bağlantı noktalarını tutan işlemlere göre değişiklik gösterir.


8

Tüm bağlantı noktalarını kontrol etmek için:

netstat -lnp

Açık bir bağlantı noktasını kapatmak için:

fuser -k port_no/tcp

Misal:

fuser -k 8080/tcp

Her iki durumda da gerekirse sudokomutu kullanabilirsiniz .


7

Söz konusu limanı dinleyen süreci öldürün. Netstat'ın size işlem kimliklerini gösterdiğine inanıyorum.


3
netstat -anp | grep <port> son sütunun işlemi var
user1747935

2

Gerçekten bir işlemi hemen öldürmek istiyorsanız, bir TERM sinyali yerine bir KILL sinyali gönderirsiniz (ikincisi durma isteği, ilki herhangi bir temizlik olmadan hemen yürürlüğe girer). Yapmasi kolay:

kill -KILL <pid>

Ancak, durmakta olduğunuz programa bağlı olarak, durumunun durumunun kötü şekilde bozulabileceğini unutmayın. Normalde yalnızca normal sonlandırma çalışmadığında bir KILL sinyali göndermek istersiniz. Çözmenin altında yatan sorunun ne olduğunu ve öldürmenin doğru çözüm olup olmadığını merak ediyorum.




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.