Я открыл порт # 5955 из класса java для связи с клиентом. Как закрыть этот порт после завершения? а также какую команду может показать мне, если порт открыт или закрыт?
Как закрыть открытый порт из терминала на Mac?
Ответ 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
.
Ответ 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>