Назад | Перейти на главную страницу

Сценарий Linux, чтобы убить процесс, прослушивающий определенный порт

У меня есть процесс, который прослушивает TCP-порт (? 0003). Время от времени вылетает - плохо. Он перестает работать, но некоторое время продолжает загружать порт, поэтому я даже не могу его перезапустить. Я хочу автоматизировать это.

Что я делаю прямо сейчас:

netstat -ntlp |grep -P "\*\:\d0003"

Чтобы узнать, что такое PID, а затем:

kill -9 <pid>

Есть ли у кого-нибудь сценарий (или EXE, если на то пошло), который связывает два шага вместе, т.е. разобрать PID из первой команды и передать его второй?

kill $(netstat -ntpl 2>/dev/null | egrep "^tcp  .*:[0-9]0003"|awk '{print $7}'|cut -d / -f 1 )

Вы можете сделать kill -9 вместо того, чтобы вы думаете, что требуется -9. Я перенаправляю netstat stderr, потому что он пропускает сообщение при запуске от имени пользователя без полномочий root, что не имеет значения для этой цели. Я включаю tcp в регулярное выражение, чтобы отфильтровать tcp6.

Вы также можете сделать так:

kill -9 $( lsof -i:?0003 -t )

вот так, одна строчка для вас

netstat -ntlp | awk '$4~/:*0003$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'

Я так понимаю python команда - это всего лишь первый член в полной команде, верно? Если у вас есть имя запускаемого скрипта, вы можете посмотреть что-то вроде pgrep -f

Если вы уверены в уникальности, вы также можете использовать связанные pkill -f

Что о killall <command> есть ли более одного из этих процессов?

Если это не сработает, попробуйте:

PID=`netstat -ntlp |grep -P "\*\:\d0003"`; kill -9 $PID

Это должно делать свое дело.

Возможно, вам поможет команда fuser с параметрами -k и -n. Чтобы получить дополнительную информацию, произнесите "man fuser".