Как закрыть открытый порт из терминала на Mac?

Я открыл порт # 5955 из класса java для связи с клиентом. Как закрыть этот порт после завершения? а также какую команду может показать мне, если порт открыт или закрыт?

Ответ 1

  • Узнайте идентификатор процесса (PID), который занимает номер порта (например, 5955), который вы хотите освободить

    sudo lsof -i :5955
    
  • Убейте процесс, который в настоящее время использует порт, используя его PID

    sudo kill -9 PID
    

Ответ 2

Список открытых файлов на порту и копирование PID

lsof -i :<port>

Убейте его огнем:)

kill -9 <PID>

Ответ 3

Однако вы открыли порт, вы закрываете его таким же образом. Например, если вы создали сокет, связали его с портом 0.0.0.0:5955 и вызвали прослушивание, закройте тот же сокет.

Вы также можете просто убить процесс, в котором открыт порт.

Если вы хотите узнать, какой процесс открыт для порта, попробуйте следующее:

lsof -i :5955

Если вы хотите узнать, открыт ли порт, вы можете выполнить ту же самую команду lsof (если какой-либо процесс открывается, он открывается, в противном случае - нет), или вы можете просто попытаться подключиться к нему, например:

nc localhost 5955

Если он немедленно возвращается без вывода, порт не открывается.

Возможно, стоит упомянуть, что, с технической точки зрения, это не порт, который открывается, а комбинация host: port. Например, если вы подключены к локальной сети как 10.0.1.2, вы можете привязать сокет к 127.0.0.1:5955 или 10.0.1.2:5955, без какого-либо влияния на другой, или вы можете привязать к 0.0.0.0: 5955 для обработки обоих одновременно. Вы можете увидеть все адреса вашего компьютера IPv4 и IPv6 с помощью команды ifconfig.

Ответ 4

Чтобы найти процесс, попробуйте:

sudo lsof -i :portNumber

Убейте процесс, который в настоящее время использует порт, используя его PID

kill PID

а затем проверьте, закрыт ли порт. Если нет, попробуйте:

kill -9 PID

Я бы сделал только следующее, если предыдущий не работал

sudo kill -9 PID

Просто, чтобы быть в безопасности. Опять же, в зависимости от того, как вы открыли порт, это может иметь значение.

Ответ 5

Я использую lsof сочетании с kill, как упоминалось выше; но написал небольшой скрипт bash для автоматизации этого процесса.

С помощью этого сценария вы можете просто ввести killport 3000 из любого места, и он уничтожит все процессы, работающие на порте 3000.

https://github.com/xtrasimplicity/killport

Ответ 6

Вы также можете использовать эту первую команду для уничтожения процесса, которому принадлежит определенный порт:

sudo netstat -ap | grep :<port_number>

Например, скажем, что этот процесс поддерживает TCP 8000, а затем выполняет команду:

sudo netstat -ap | grep :8000

выводит строку, соответствующую порту хранения процесса 8000, например:

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

В этом случае procHoldingPort - это имя процесса, открывшего порт, 4683 - его pid и 8000 (обратите внимание, что это TCP) - номер порта, который он удерживает (который вы хотите закрыть).

Затем запустите процесс, следуя приведенному выше примеру:

kill  4683

Как упоминалось выше, если это не работает (вы можете попробовать использовать kill с -9 в качестве аргумента):

kill -9 4683

Опять же, в общем, лучше избегать отправки SIGKILL (-9), если вы можете.

Приветствия,

Гай.

Ответ 7

Когда программа, открывшая порт, выйдет из строя, порт будет закрыт автоматически. Если вы убьете процесс Java, запускающий этот сервер, это должно сделать это.

Ответ 8

Я создал функцию для этой цели.

function free_port() {
    if [ -z $1 ] 
    then
        echo no Port given
    else
        PORT=$1;
        PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port 

        if [ -z $PID ] 
        then
            echo port: $PORT is already free.
        else
            sudo kill -9 $PID # kill the process, which frees the port
            echo port: $PORT is now free.
        fi
    fi
}

free_port 80 # you need to change this port number

Скопируйте и вставьте этот блок кода в свой терминал, чтобы освободить нужный порт. Просто не забудьте изменить номер порта в последней строке.

Ответ 9

очень просто найти порт 5900:

sudo lsof -i :5900

затем рассматривая 59553 в качестве PID

sudo kill 59553

Ответ 10

попробуйте ниже, предполагая, что запущенный порт 8000:

free-port() { kill "$(lsof -t -i :8000)"; }

Я нашел ссылку здесь

Ответ 11

  • Сначала найдите идентификатор Procees (pid), который занял требуемый порт (например, 5434)

    ps aux | grep 5434

2.Выполните этот процесс

   kill -9 <pid>