Как убить процесс, выполняющийся на определенном порту в Linux?
Я попытался закрыть tomcat, используя ./shutdown.sh
из каталога tomcat /bin
. Но обнаружил, что сервер не был закрыт должным образом. И, таким образом, я не смог перезапустить. Мой Tomcat работает на порту 8080
.
Я хочу убить процесс tomcat, запущенный на 8080
. Сначала я хочу иметь список процессов, запущенных на определенном порту (8080), чтобы выбрать, какой процесс нужно убить.
Ответы
Ответ 1
Используйте команду
sudo netstat -plten |grep java
используется grep java
как tomcat
использует java
как свои процессы.
Он покажет список процессов с номером порта и идентификатором процесса
tcp6 0 0 :::8080 :::* LISTEN
1000 30070621 16085/java
число до /java
- это идентификатор процесса. Теперь используйте команду kill
, чтобы убить процесс
kill -9 16085
-9
подразумевает, что процесс будет убит принудительно.
Ответ 2
Этот fuser 8080/tcp
будет печатать вам PID процесса, связанного с этим портом.
И этот fuser -k 8080/tcp
убьет этот процесс.
Работает только с Linux. Более универсальным является использование lsof -i4
(или 6 для IPv6).
Ответ 3
Чтобы перечислить любой процесс, прослушивающий порт 8080:
lsof -i:8080
Чтобы убить любой процесс, прослушивающий порт 8080:
kill $(lsof -t -i:8080)
или более насильственно:
kill -9 $(lsof -t -i:8080)
(-9
соответствует SIGKILL - terminate immediately/hard kill
сигнал SIGKILL - terminate immediately/hard kill
: см. Список сигналов убийства и какова цель опции -9 в команде kill?. Если сигнал для kill
не указан, то сигнал TERM или -15
или отправлено soft kill
, которого иногда недостаточно для -15
процесса.).
Ответ 4
Я бы добавил эту однострочную строку, чтобы убить только LISTEN на конкретном порту:
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
Ответ 5
Вы можете использовать команду 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
Этот работал у меня.
вот ссылка с исходного сообщения: ссылка
Ответ 6
Если вы хотите уничтожить процесс, запущенный на порту 8080, то сначала вам нужно найти идентификационный номер процесса порта (PID) 8080, а затем уничтожить его. Выполните следующую команду, чтобы найти 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
Ответ 7
Это выводит на печать идентификаторы процессов всего, что выполняется на <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)
}
Ответ 8
Знать 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
Ответ 9
Получить PID задания и убить его.
lsof -ti:8080 | xargs kill
Ответ 10
попробуйте это,
sudo fuser -n tcp -k 8080
Ответ 11
Ответ 12
Linux: Сначала вы можете найти PID этой команды, если знаете порт:
netstat -tulpn
пример:-
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
Затем вы берете процесс убийства. выполните следующую команду:
убить -9 PID
Пример: -
убить -9 15986
Ответ 13
Linux. Вы можете использовать эту команду, если знаете порт:
netstat -plten | grep LISTEN | grep 8080
AIX:
netstat -Aan | grep LISTEN | grep 8080
Затем вы берете первый столбец (пример: f100050000b05bb8) и выполняете следующую команду:
rmsock f100050000b05bb8 tcpcb
убить процесс.
Ответ 14
Вы можете узнать список всех портов, запущенных в системе, вместе с его данными (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}
процесс, используя номер порта: fuser -n tcp {port_number}
используйте sudo
если у вас нет доступа к ним.
Ответ 15
Выберите номер порта и примените команду grep в netstat, как показано ниже
netstat -ap | grep :7070
Консольный вывод
tcp 0 0: 7070: * LISTEN 3332/java
Убейте сервис на основе PID (идентификационный номер процесса)
kill -9 3332
Ответ 16
kill -9 `fuser 8080/tcp|xargs -n 1`
, эти команды также убивают процесс, который прослушивает порт 8080 с помощью TCP-соединения
Ответ 17
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp
Результат: 80/tcp: 1858 1867 1868 1869 1871
Убить процесс по одному
убить -9 1858
Ответ 18
чтобы опираться на то, что @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
Ответ 19
Другой способ с Git Bash:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
Ответ 20
В Windows это будет netstat -ano | grep "8080"
, и мы получим следующее сообщение TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076
МЫ можем убить PID, используя taskkill /F /PID 10076