Mac'teki terminalden açık bir bağlantı noktasını nasıl kapatabilirim?


199

Bir istemciden iletişim kurmak için 5955 numaralı bağlantı noktasını bir java sınıfından açtım. Bitirdikten sonra bu bağlantı noktasını nasıl kapatabilirim? ve ayrıca bağlantı noktası açık veya kapalı olduğunda hangi komut bana gösterebilir?


1
O limanı nasıl açtın? Java uygulamasındaki veya güvenlik duvarındaki bağlantı noktalarını açıp kapamaktan bahsettiğiniz açık değildir.
mariosangiorgio

Yanıtlar:


398
  1. Serbest bırakmak istediğiniz bağlantı noktası numarasını (ör. 5955) işgal eden işlem kimliğini (PID) bulun.

    sudo lsof -i :5955
    
  2. Şu anda bağlantı noktasını kullanan işlemi PID'sini kullanarak öldür

    sudo kill -9 PID
    

33
-9 göndermek bir süreci öldürmek için ilk girişim olmamalı ve bu çok kötü bir alışkanlık. Hatırladığım gibi, önce kill PID(-15 anlamına gelen) kullanmanız, sonra -2 ve -1'i denemeniz gerekir. -9 yalnızca son çare her diğer seçenekler işe başarısız oldu.
Miyav

3
@Meow tarafından önerilen herhangi bir bayrak olmadan pID öldürdü ve bu benim için çalıştı
Toni Leigh

40

Süreci bulmak için şunu deneyin:

sudo lsof -i :portNumber

Şu anda bağlantı noktasını kullanan işlemi PID'sini kullanarak öldür

kill PID

ve sonra bağlantı noktasının kapalı olup olmadığını kontrol edin. Değilse, deneyin:

kill -9 PID

Sadece önceki çalışmadıysa aşağıdakileri yapardım

sudo kill -9 PID

Sadece güvenli olmak için. Yine limanı nasıl açtığınıza bağlı olarak, bu önemli olmayabilir.


26

Bağlantı noktasını açmış olsanız da, aynı şekilde kapatırsınız. Örneğin, bir yuva oluşturduysanız, bağlantı noktasını 0.0.0.0:5955 bağlantı noktasına bağlayın ve listen adı verildiğinde, aynı soketi kapatın.

Ayrıca bağlantı noktası açık olan işlemi de öldürebilirsiniz.

Hangi işlemin bağlantı noktası açık olduğunu öğrenmek istiyorsanız şunu deneyin:

lsof -i :5955

Bir bağlantı noktasının açık olup olmadığını bilmek istiyorsanız, aynı lsof komutunu yapabilirsiniz (herhangi bir işlem açıksa, açıktır; aksi halde açık değildir) veya sadece bağlanmayı deneyebilirsiniz, örneğin:

nc localhost 5955

Çıktı olmadan hemen geri dönerse, bağlantı noktası açık değildir.

Teknik olarak konuşursak, açık olan bir port değil, bir host: port kombinasyonudur. Örneğin, 10.0.1.2 olarak bir LAN'a bağlıysanız, bir soketi diğerini etkilemeden 127.0.0.1:5955 veya 10.0.1.2:5955'e bağlayabilir veya 0.0.0.0'a bağlayabilirsiniz. : 5955 her ikisini birden idare etmek için. ifconfigKomut ile bilgisayarınızın tüm IPv4 ve IPv6 adreslerini görebilirsiniz .


24

çok basit bulmak bağlantı noktası 5900:

sudo lsof -i :5900

sonra 59553'ü PID olarak değerlendirir

sudo kill 59553

1
Bu mevcut cevaplara hiçbir şey katmaz!
hatef

16

2018'de MacOS HighSierra kullanarak benim için işe yarayan şey:

sudo lsof -nPi: yourPortNumber

sonra:

sudo kill -9 yourPIDnumber


1
lsof -nPibiraz daha iyidir çünkü bağlantı noktası numarası çıkışta görünür durumdadır ve ne öldürdüğünüzü daha iyi anlarsınız.
Rich Stone

1
Ayrıca tüm dinleme bağlantı noktalarının bilgilerini görmek için yararlı:sudo lsof -nPi | grep LISTEN
leanne

15

Bir astar en iyisidir

kill -9 $(lsof -i:PORT -t) 2> /dev/null

Örnek: Mac'te, 9604 numaralı bağlantı noktasını temizlemek istedim. Aşağıdaki komut bir cazibe gibi çalıştı

 kill -9 $(lsof -i:9604 -t) 2> /dev/null 

6

Belirli bir bağlantı noktasına sahip olan bir işlemi öldürmek için bu ilk komutu da kullanabilirsiniz:

sudo netstat -ap | grep :<port_number>

Örneğin, bu işlemin 8000 TCP bağlantı noktasını tuttuğunu ve ardından komutu çalıştırdığını varsayalım:

sudo netstat -ap | grep :8000

işlem tutma bağlantı noktası 8000'e karşılık gelen hattı çıktılar, örneğin:

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

Bu durumda, procHoldingPort portu açtı sürecinin adıdır, 4683 onun pid olduğunu ve 8000 (eğer yakın isteyen) bu tutar port numarası (TCP olduğunu not) olduğunu.

Ardından, yukarıdaki örneği takip ederek işlemi öldürün:

kill  4683

Burada belirtildiği gibi, eğer işe yaramazsa (kill'i -9 ile argüman olarak kullanmayı deneyebilirsiniz):

kill -9 4683

Yine, genel olarak, mümkünse SIGKILL (-9) göndermekten kaçınmak daha iyidir.

Alkış,

İnsan.


5

I kullanmak lsofbirlikte kill, yukarıda belirtildiği gibi; ancak bu işlemi otomatikleştirmek için küçük bir bash betiği yazdı.

Bu komut dosyasıyla, killport 3000herhangi bir yerden yazabilirsiniz ve bağlantı noktasında çalışan tüm işlemleri öldürür 3000.

https://github.com/xtrasimplicity/killport


1
Günümü kurtardın. Nedense lsofile birlikte killhiçbir şey dönmedi ve benim senaryo macOS Sierra asmak yaptı. Ancak killportbir cazibe gibi çalışır ve daha hızlıdır. Teşekkürler!
wout

4

Bu amaçla bir işlev yarattım.

function free_port() {
    if [ -z $1 ] 
    then
        echo no Port given
    else
        PORT=$1;
        PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port 

        if [ -z $PID ] 
        then
            echo port: $PORT is already free.
        else
            sudo kill -9 $PID # kill the process, which frees the port
            echo port: $PORT is now free.
        fi
    fi
}

free_port 80 # you need to change this port number

Bu kod bloğunu terminalinize kopyalayıp yapıştırmak istediğiniz bağlantı noktasını serbest bırakmalıdır. Sadece son satırdaki port numarasını değiştirmeyi unutmayın.


3

çalışan bağlantı noktası olduğunu varsayarak aşağıda deneyin 8000:

free-port() { kill "$(lsof -t -i :8000)"; }

Referansı burada buldum


1

Bağlantı noktasını açan program çıktığında, bağlantı noktası otomatik olarak kapatılır. Bu sunucuyu çalıştıran Java işlemini öldürürseniz, bunu yapmalısınız.


-1
  1. Öncelikle gerekli bağlantı noktasını işgal eden Procees id (pid) değerini bulun (örn. 5434).

    ps aux | grep 5434

2. bu süreci öldür

   kill -9 <pid>
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.