Я часто делаю например
sudo netstat -lpn |grep :8088
просмотреть вывод
tcp6 0 0 :::8088 :::* LISTEN 11189/java
а потом
sudo kill -kill 11189
Я хотел бы иметь более удобную команду, точно такую же, killatport 8088
которая использует номер порта tcp в качестве переменной и которую я могу сделать в качестве псевдонима для конвейера, который делает то, что я хочу, но как мне получить PID из выходных данных и канала это к команде kill? Я полагаю, что я мог бы использовать awk для получения PID из вывода netstat, но как мне защитить и установить точное совпадение портов, чтобы вход 80 не совпадал с 8080 и аналогичным образом? Должен ли я сделать это программой на С вместо? Или уже есть такая маленькая утилита?
bash
scripts
command-line
kill
Никлас
источник
источник
mvn jetty:stop
может произойти сбой, если экземпляр имеетOutOfMemoryError
. Когда я перезапускаю сервлеты Java, случается, что порт недоступен даже при обычной остановке, такой какmvn jetty:stop
. Иногда процесс может получитьOutOfMemoryError
и не освободить порт TCP при обычном завершении работы, напримерmvn jetty:stop
.mvn jetty:stop
не менее, это не то же самое, что отправка SIGTERM, и jvm должен по-прежнему иметь возможность обрабатывать SIGTERM, даже если его приложение (я) находится вне памяти.Ответы:
fuser может сделать это:
источник
Команду можно сформулировать так:
Объяснение:
netstat -ltpn
l
) в TCP (t
) и их программы (p
) без преобразования номеров портов в имена (n
).grep ":1234\b"
:1234
сопровождается границей (\b
), указывающей конец слова (или число, в нашем случае). Это гарантирует, что мы не поймать,:12345
например.awk '{sub(/\/.*/, "", $NF); print $NF}'
Эта
sub(/regex/,"replacewith", #fieldnumber)
\/.*
""
$NF
, что означает последнее поле (то есть поле, которое содержитPID/program
)print $NF
.Регулярное выражение
\/.*
совпадает с литералом/
и всем после него, а затем мы заменяем его ничем, по существу удаляя его, поэтому в этом поле остается только номер PID.xargs -i kill -kill {}
xargs -i
это программа, которая позволяет сделать вывод предыдущей команды действовать как ввод другой команды. Наша командаkill -kill {}
где{}
указывает «вывод предыдущей команды в конвейере», который является нашим номером PID.Примечание: вся эта команда может быть немного опасной, потому что вы можете случайно убить то, что не хотите. Это можно использовать с немного большей дезинфекцией. Просто убедитесь, что вы получаете правильный номер порта при его использовании.
Если вы хотите превратить это в функцию, вы можете добавить следующее
~/.bashrc
:Сохраните и примените изменения, используя
source ~/.bashrc
. Теперь вы можете использовать функцию следующим образом:источник