it-swarm.com.ru

Как убить процесс, работающий на определенном порту в Linux?

Я попытался закрыть Tomcat, используя ./shutdown.sh из каталога Tomcat /bin. Но обнаружил, что сервер не был закрыт должным образом. И поэтому я не смог перезапустить
Мой Tomcat работает на порту 8080.

Я хочу убить процесс Tomcat, работающий на 8080. Сначала я хочу получить список процессов, запущенных на определенном порту (8080), чтобы выбрать, какой процесс нужно убить.

482
veer7

Используйте команду

 Sudo netstat -plten |grep Java

использовал grep Java в качестве Tomcat использует Java в качестве своих процессов.

Он покажет список процессов с номером порта и идентификатором процесса

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/Java

число перед /Java является идентификатором процесса. Теперь используйте команду kill, чтобы завершить процесс

kill -9 16085

-9 подразумевает, что процесс будет принудительно завершен.

213
veer7

Этот fuser 8080/tcp напечатает вам PID процесса, связанного с этим портом.

И этот fuser -k 8080/tcp убьет этот процесс.

Работает только на Linux. Более универсальным является использование lsof -i4 (или 6 для IPv6). 

690
nudzo

Чтобы перечислить любой процесс, прослушивающий порт 8080:

lsof -i:8080

Чтобы убить любой процесс, прослушивающий порт 8080:

kill $(lsof -t -i:8080)

или более насильственно:

kill -9 $(lsof -t -i:8080)

(-9 соответствует сигналу SIGKILL - terminate immediately/hard kill: см. Список сигналов уничтожения и Какова цель опции -9 в команде kill? . Если для kill не указан сигнал, сигнал TERM aka -15 или soft kill, что иногда недостаточно для остановки процесса.).

432
Franck Dernoncourt

Вы можете использовать команду lsof . Пусть номер порта, как здесь, 8090

lsof -i:8090

Эта команда возвращает список открытых процессов на этом порту.

Что-то вроде…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

Чтобы освободить порт, убейте процесс, используя его (идентификатор процесса - 75782)…

kill -9 75782

Этот работал для меня . Вот ссылка из оригинального сообщения: ссылка

97
Kop4lyf

Я бы добавил этот однострочник только для LISTEN на конкретный порт:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

72
Gal Bracha

Если вы хотите уничтожить процесс, запущенный на порту 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:8080)

Для получения дополнительной информации вы можете увидеть следующую ссылку Как убить процесс на определенном порту в Linux

56
mahfuz110244

Это печатает, чтобы выводить идентификаторы процесса всего, что работает на <port_number>

fuser -n tcp <port_number> 

Он также печатает некоторые вещи в stderr, поэтому:

fuser -n tcp <port_number> 2> /dev/null

Затем мы можем предоставить эти идентификаторы процесса команде kill:

Sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

Вы также можете поместить это в функцию, если вы делаете это много:

function killport() {
    Sudo kill $(fuser -n tcp $1 2> /dev/null)
}
36
Brian Peterson

Чтобы узнать PID службы, работающей на конкретном порту:

netstat -tulnap | grep :*port_num*

вы получите описание этого процесса. Теперь используйте kill или kill -9 pid. Легко убит.

например

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/Java 

Сейчас:

kill -9 1880

Не забудьте запустить все команды как root

31
Sanjay s.

попробуй так,

 Sudo fuser -n tcp -k 8080
17
Adil Abbasi

Получить PID задания и убить его.

lsof -ti:8080 | xargs kill
12
Rahul Garg

Linux : сначала вы можете найти PID этой команды, если знаете порт:

netstat -tulpn 

пример:-

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

Затем вы берете процесс убийства. выполните следующую команду:

убить -9 PID

Пример: - 

убить -9 15986

11
Kundan Kumar
  1. lsof -i tcp:8000 Эта команда выводит информацию о процессе, запущенном в порту 8000

  2. kill -9 [PID] Эта команда убивает процесс

11
Nandhitha Ramaraj

Linux : Вы можете использовать эту команду, если знаете порт:

netstat -plten | grep LISTEN | grep 8080

AIX

netstat -Aan | grep LISTEN | grep 8080

Затем вы берете первый столбец (пример: f100050000b05bb8) и запускаете следующую команду:

rmsock f100050000b05bb8 tcpcb

убить процесс.

9
ben rhouma moez

kill -9 `fuser 8080/tcp|xargs -n 1`, эта команда также убивает процесс, который прослушивает порт 8080 с подключением TCP

6
Harshit Garg

Вы можете знать список всех портов, в которых работает в системе, вместе с ее деталями (pid, адрес и т.д.):

netstat -tulpn

Вы можете узнать сведения о конкретном номере порта , указав номер порта в следующей команде:

Sudo netstat -lutnp | grep -w '{port_number}'

пример: Sudo netstat -lutnp | grep -w '8080' Подробности будут предоставлены следующим образом:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

если вы хотите убить процесс с помощью pid, то : kill -9 {PID}

если вы хотите убить процесс, используя номер порта : fuser -n tcp {port_number}

используйте Sudo, если у вас нет доступа к ним.

4
YAP
Sudo apt-get install psmisc (or Sudo yum install psmisc)
Sudo fuser 80/tcp

Результат: 80/tcp: 1858 1867 1868 1869 1871

Убить процесс по одному

убить -9 1858 

1
Fadid

Другой способ с Git Bash:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
0
Lucas Moyano Angelini

основываться на том, что @ veer7 сказал: 

если вы хотите знать, что было на порте, сделайте это, прежде чем убить его.

$ Sudo netstat -plten |grep Java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/Java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/Java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/Java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/Java-8-openjdk-AMD64/bin/Java -Dcatalina.base=/hom

Используйте 'ps' и номер процесса, о котором netstat сообщил

0
JesseBoyd