it-swarm.com.ru

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

Я открыл порт № 5955 из класса Java для связи с клиентом. Как мне закрыть этот порт после того, как я закончу? а также какая команда может показать мне, если порт открыт или закрыт?

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

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

    Sudo kill -9 PID
    
294
Future2020

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

Sudo lsof -i :portNumber

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

kill PID

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

kill -9 PID

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

Sudo kill -9 PID

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

23
oeste

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

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

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

lsof -i :5955

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

nc localhost 5955

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

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

23
abarnert

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

Sudo netstat -ap | grep :<port_number>

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

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), если можете.

Ура,

Guy.

5
Guy Avraham

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

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

https://github.com/xtrasimplicity/killport

5
XtraSimplicity

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

Sudo lsof -i :5900

затем считая 59553 PID

Sudo kill 59553
4
flik

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

1
Barmar

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

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

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

1
Hasan A Yousef

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

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

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

1
Md. Khairul Islam

В 2018 году вот что сработало для меня с использованием MacOS HighSierra: 

Sudo lsof -nPi: ваш номер порта

затем:

Sudo kill -9 yourPIDnumber 

0
Gel Sisaed