Вбийте будь-яку службу, що працює на певному порту


13

Я намагаюся написати сценарій, який вбиває службу, що працює на певному порту. Це мій сценарій:

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

Це програма java. Цей сценарій працює іноді, але загадково виходить з ладу більшу частину часу.

Чи є якийсь інший спосіб вбити службу, що працює на порту? Мій порт є 4990.


Ваш сценарій також знищить процеси Java, що працюють на інших домашніх тварин, таких як 14990.
roaima

Відповіді:


32

Ви можете спробувати fuser:

fuser -k 4990/tcp

Або використовуючи lsofдля отримання ідентифікатора процесу, потім подайте на kill:

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

Чи повинен я замінити tcp на java?
Abhishek dot py

@Abhishekdotpy: Ні, використовуйте tcp.
cuonglm

Дякую за цей -tпрапор, мені це було потрібно так довго.
Джексон

Чи можете ви надати підказку, як правильно передати останній рядок до ssh?
Володимир Проценко

@VladimirProtsenko чи можете ви надати більше контексту?
cuonglm

4

Якщо ви хочете вбити будь-яку службу або процес, що працює на номері порту 8080, то спочатку вам потрібно знайти ідентифікаційний номер порту 8080 порту (PID), а потім його вбити. Виконайте таку команду, щоб знайти номер 8080 PID номера порту:

sudo lsof -t -i:8080

Ось

  • sudo - команда запитувати права адміністратора (ідентифікатор користувача та пароль).
  • lsof - список файлів (також використовується для списку пов'язаних процесів)
  • -t - показати лише ідентифікатор процесу
  • -i - показувати лише процес, пов'язаний з підключенням до Інтернету
  • : 8080 - показувати лише процеси в цьому номері порту

Тепер ви можете легко вбити свій PID за допомогою наступної команди:

sudo kill -9 <PID>

Ось

  • kill - команда вбити процес
  • -9 - насильно

Ви можете використовувати одну команду, щоб вбити процес на певному порту, використовуючи таку команду:

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

Докладніше ви можете побачити наступне посилання Як вбити процес на певному порту в Linux


Використання не kill -9дає можливості цільовому процесу привести в порядок. Подумайте про використання звичайного kill, принаймні спочатку.
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 kill.php
  2. запустіть файл php з необхідним портом $ php kill.php 8088

1
Використання не kill -9дає можливості цільовому процесу привести в порядок. Подумайте про використання звичайного kill, принаймні спочатку.
roaima

+1 для використання PHP для цього завдання.
Bananguin

@ G-Man помилково додав
Ниви

@Bananguin вбити точний ідентифікатор процесу даного порту вживає при виконанні процесу грона з Дженкінс
Нивами

під час запуску файлів сценаріїв та його lsof -t -i:port_idкоманди містять, коли процес збирання port_idабо process idof port_idможе бути порожнім, тоді ми отримуємо деяку командну помилку, щоб уникнути такої помилки, яку я використовую. тут я можу вбити точний ідентифікатор процесу даного порту
Ниви
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.