Matikan semua layanan yang berjalan di port tertentu

13

Saya mencoba menulis skrip yang mematikan layanan yang berjalan di port tertentu. Ini skrip saya:

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

Ini adalah program java. Script ini kadang-kadang berfungsi, tetapi secara misterius gagal sebagian besar waktu.

Apakah ada cara lain untuk membunuh layanan yang berjalan di pelabuhan? Port saya adalah 4990.

Abhishek dot py
sumber
Skrip Anda juga akan membunuh proses Java yang berjalan pada hewan peliharaan lain seperti 14990.
roaima

Jawaban:

32

Anda dapat mencoba fuser:

fuser -k 4990/tcp

Atau gunakan lsofuntuk mendapatkan id proses, lalu beri makan ke kill:

kill $(sudo lsof -t -i:4990)
cuonglm
sumber
Haruskah saya mengganti tcp dengan java?
Abhishek dot py
@Abhishekdotpy: Tidak, gunakan tcp.
cuonglm
Terima kasih atas -tbendera itu, saya sudah membutuhkannya begitu lama.
Jackson
Bisakah Anda memberi petunjuk tentang cara melewati baris terakhir dengan benar ke ssh?
Vladimir Protsenko
@VladimirProtsenko dapatkah Anda memberikan lebih banyak konteks?
cuonglm
4

Jika Anda ingin mematikan layanan atau proses apa pun yang berjalan pada nomor port 8080 maka pertama-tama Anda harus menemukan nomor identifikasi proses (PID) port 8080 dan kemudian membunuhnya. Jalankan perintah berikut untuk menemukan P80 nomor port 8080:

sudo lsof -t -i:8080

Sini,

  • sudo - perintah untuk meminta hak istimewa admin (id dan kata sandi pengguna).
  • lsof - daftar file (Juga digunakan untuk daftar proses terkait)
  • -t - hanya menampilkan ID proses
  • -i - hanya menunjukkan proses terkait koneksi internet
  • : 8080 - hanya tampilkan proses dalam nomor port ini

Jadi sekarang Anda dapat dengan mudah membunuh PID Anda menggunakan perintah berikut:

sudo kill -9 <PID>

Sini,

  • kill - command untuk menghentikan proses
  • -9 - dengan paksa

Anda dapat menggunakan satu perintah untuk mematikan proses pada port tertentu menggunakan perintah berikut:

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

Untuk lebih lanjut Anda dapat melihat tautan berikut Cara membunuh proses pada port tertentu di linux

Mahfuz
sumber
Menggunakan kill -9memberi proses target tidak ada kesempatan untuk merapikan. Pertimbangkan menggunakan polos kill, setidaknya pada awalnya.
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. buat file php kill.php
  2. jalankan file php dengan port yang diperlukan $ php kill.php 8088
nivas
sumber
1
Menggunakan kill -9memberi proses target tidak ada kesempatan untuk merapikan. Pertimbangkan menggunakan polos kill, setidaknya pada awalnya.
roaima
+1 untuk menggunakan PHP untuk tugas ini.
Bananguin
@ G-Man tidak sengaja menambahkannya
nivas
@Bananguin untuk membunuh id proses yang tepat dari port yang diberikan saya menggunakan ini ketika menjalankan proses banyak dengan jenkins
nivas
saat menjalankan file naskah dan yang mengandung lsof -t -i:port_idperintah ketika proses membangun port_idatau process iddari port_idmungkin kosong, saat itu kami mendapatkan beberapa error perintah, untuk menghindari bahwa jenis kesalahan am menggunakan ini. di sini saya dapat membunuh id proses yang tepat dari port yang diberikan
nivas