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?
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?
Yanıtlar:
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
Şu anda bağlantı noktasını kullanan işlemi PID'sini kullanarak öldür
sudo kill -9 PID
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.
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.
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. ifconfig
Komut ile bilgisayarınızın tüm IPv4 ve IPv6 adreslerini görebilirsiniz .
2018'de MacOS HighSierra kullanarak benim için işe yarayan şey:
sudo lsof -nPi: yourPortNumber
sonra:
sudo kill -9 yourPIDnumber
lsof -nPi
biraz 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.
sudo lsof -nPi | grep LISTEN
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
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.
I kullanmak lsof
birlikte 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 3000
herhangi bir yerden yazabilirsiniz ve bağlantı noktasında çalışan tüm işlemleri öldürür 3000
.
lsof
ile birlikte kill
hiçbir şey dönmedi ve benim senaryo macOS Sierra asmak yaptı. Ancak killport
bir cazibe gibi çalışır ve daha hızlıdır. Teşekkürler!
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.
çalışan bağlantı noktası olduğunu varsayarak aşağıda deneyin 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
Referansı burada buldum
Ö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>