У меня есть процесс, который прослушивает 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".