Belirli bir limanda çalışan tüm hizmetleri öldürün


13

Belirli bir bağlantı noktasında çalışan hizmeti öldüren bir komut dosyası yazmaya çalışıyorum. Bu benim senaryom:

a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a

Bu bir java programı. Bu komut dosyası bazen çalışır, ancak çoğu zaman gizemli bir şekilde başarısız olur.

Bir limanda çalışan bir hizmeti öldürmenin başka bir yolu var mı? Portum 4990.


Betiğiniz ayrıca 14990 gibi diğer evcil hayvanlarda çalışan Java işlemlerini de öldürür.
roaima

Yanıtlar:


32

Deneyebilirsiniz fuser:

fuser -k 4990/tcp

Veya lsofişlem kimliğini almak için tuşlarını kullanın, ardından aşağıdakilere besleyin kill:

kill $(sudo lsof -t -i:4990)

TCP'yi Java ile değiştirmek zorunda mıyım?
Abhishek dot py

@Abhishekdotpy: Hayır, kullan tcp.
cuonglm

O -tbayrak için teşekkür ederim , buna çok ihtiyacım var.
Jackson

Son satırı ssh'ye nasıl düzgün bir şekilde geçireceğinize dair bir ipucu verebilir misiniz?
Vladimir Protsenko

@VladimirProtsenko daha fazla bağlam sağlayabilir misiniz?
cuonglm

4

8080 numaralı bağlantı noktasında çalışan herhangi bir hizmeti veya işlemi öldürmek istiyorsanız, önce 8080 bağlantı noktası işlem tanımlama numarasını (PID) bulmanız ve sonra öldürmeniz gerekir. 8080 bağlantı noktası numarası PID'sini bulmak için aşağıdaki komutu çalıştırın:

sudo lsof -t -i:8080

Buraya,

  • sudo - yönetici ayrıcalığı isteme komutu (kullanıcı kimliği ve şifre).
  • lsof - dosya listesi (İlgili işlemleri listelemek için de kullanılır)
  • -t - yalnızca işlem kimliğini göster
  • -i - yalnızca internet bağlantılarıyla ilgili işlemi göster
  • : 8080 - sadece bu port numarasındaki işlemleri göster

Böylece aşağıdaki komutu kullanarak PID'nizi kolayca öldürebilirsiniz:

sudo kill -9 <PID>

Buraya,

  • kill - işlemi öldürme komutu
  • -9 - zorla

Aşağıdaki komutu kullanarak belirli bir bağlantı noktasındaki bir işlemi öldürmek için bir komut kullanabilirsiniz:

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

Daha fazla bilgi için aşağıdaki bağlantıyı görebilirsiniz : Linux'ta belirli bir bağlantı noktasındaki bir işlem nasıl öldürülür


Kullanmak kill -9, hedef sürece toparlanma fırsatı vermez. killEn azından başlangıçta sade kullanmayı düşünün .
roaima

1
<?php
  $port = $argv[1]; 
  if(!empty($port) && is_numeric($port) ){
  $pid = trim(shell_exec("lsof -t -i:".$port));
  if(!empty($pid)){
     shell_exec("sudo kill -9 ".$pid);
     echo "pid : ".$pid."  killed which is listened port : ".$port."\xA";
  }
  else{
     echo " [X] no such process found for pid : ".$port."\xA";
  }
  }
  else{ 
     echo " invalid pid \xA";
  }
?>
  1. php dosyası oluştur kill.php
  2. php dosyasını gerekli port ile çalıştır $ php kill.php 8088

1
Kullanmak kill -9, hedef sürece toparlanma fırsatı vermez. killEn azından başlangıçta düz kullanmayı düşünün .
roaima

Bu görev için PHP kullanmak için +1.
Bananguin

@ G-Man yanlışlıkla ekledi
nivas

@Bangutan verilen bağlantı noktasının kesin işlem kimliğini öldürmek için bunu jenkins ile demet işlemi yürütürken kullanıyorum
nivas

komut dosyalarını çalıştıran ve onun içerdiğinde lsof -t -i:port_idoluşturma işlemi sırasında komutu port_idveya process idbir port_idboş olabilir, o zaman biz bu kullanılan hata am bu tür önlemek için, bazı komut hatası alıyorum. burada verilen bağlantı noktasının kesin işlem kimliğini öldürebilirim
nivas
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.