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

Мне было интересно, есть ли способ убить процесс, который выполняется на определенном IP-порту и в Ubuntu 14.04 на локальном IP-адресе и порту? Предпочтительно, это было бы в одной команде, но если нет, скрипт bash также был бы прекрасен.

  • CasperJS и PHP In Cron Job не могут открывать файлы, отлично работают при запуске Manualy
  • Как кэшировать все загрузки в Интернете
  • Настройка syslogd в Ubuntu
  • LUKS на внутреннем жестком диске
  • Как установить daemontools на ubuntu или debian из источника
  • «На» рабочие места застряли?
  • Изменение DNS по умолчанию на подключении openvpn
  • bash autocomplete не работает, не «завершает»
  • 5 Solutions collect form web for “Как я могу убить процесс, выполняющийся на определенном IP-адресе и порту?”

    Есть, вероятно, более чистые способы, но что-то вроде:

    netstat -lnp | grep 'tcp .*127.0.0.1:9984' | sed -e 's/.*LISTEN *//' -e 's#/.*##' | xargs kill 

    Используя ss мы можем получить подробную информацию о процессах / соединениях, которые прослушиваются на определенном IP и порту, для src 127.0.0.1 и порта 80 :

     sudo ss -lp '( dport = :80 )' src 127.0.0.1 

    то мы можем получить только PID с помощью grep и убить их всех с помощью xargs и kill .

     sudo ss -lp '( dport = :80 )' src 127.0.0.1 | grep -Po "(?<=pid=).*(?=,)"\ | sort | uniq | xargs kill 

    Вы также можете использовать -a вместо -l чтобы получить список всех прослушивающих и не прослушивающих сокетов.

    fuser на Linux имеет опцию, которая делает именно то, что вы ищете.

    Например, fuser 80/tcp будет печатать PID процесса, связанного с этим портом, и fuser -k 80/tcp убьет этот процесс.

    В linux, как root , вы можете использовать либо

     ss -ptan 

    или

     netstat -ntulp 

    для получения списка всех запущенных процессов, которые «прослушивают» (в этом случае tcp, замените «t» на «u» для udp).

    Таким образом, один лайнер, чтобы убить процесс, прослушивающий порт 80, выглядел бы примерно так:

     ss -tanp | grep 80 | head -1 | sed 's_.*pid=\(.*\),.*_\1_' | xargs kill 

    Единственный IP-процесс, который может выполняться на локальной машине, – это 127.0.0.1 , lo , loopback-устройство, известное как localhost . Порты могут быть перенаправлены на общедоступный IP-адрес с сетевыми конфигурациями.

    Обычно я использую sudo lsof -i :<port> чтобы узнать, что вызывает EADDRINUSE, потому что он быстрее набирается .

     sudo lsof -i :443 | tail -1 | cut -f2 -d' ' | xargs kill 

    lsof процесс, выполняющийся на порту 443, если ваш lsof вывод, например:

     COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3 32233 cat 4u IPv4 24123106 0t0 TCP *:http-alt (LISTEN) 

    Из lsof --help :

     -ii select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list] 
    Linux и Unix - лучшая ОС в мире.