Я открыл порт № 5955 из класса Java для общения с клиентом. Как закрыть этот порт после завершения? а также какая команда может показать мне, если порт открыт или закрыт?
Отправка -9 не должна быть первой попыткой убить процесс, и это очень плохая привычка. Насколько я помню, вы должны сначала просто использовать kill PID(что подразумевает -15), затем попробуйте -2 и -1. -9 - последнее средство, только если все остальные параметры не сработали.
Мяу
3
убил pID без каких-либо флагов, как предложено @Meow, и это сработало для меня
Тони Ли
41
Чтобы найти процесс, попробуйте:
sudo lsof -i :portNumber
Убейте процесс, который в данный момент использует порт, используя его PID
kill PID
а затем проверьте, закрыт ли порт. Если нет, попробуйте:
kill -9 PID
Я сделал бы только следующее, если предыдущий не работал
sudo kill -9 PID
Просто чтобы быть в безопасности. Опять же, в зависимости от того, как вы открыли порт, это может не иметь значения.
Однако, открыв порт, вы закрываете его таким же образом. Например, если вы создали сокет, привязали его к порту 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.
Вы также можете использовать эту первую команду, чтобы убить процесс, которому принадлежит определенный порт:
sudo netstat -ap | grep :<port_number>
Например, скажем, этот процесс содержит порт 8000 TCP, а затем запускает команду:
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), если можете.
Ты спас мой день. Почему-то lsofв сочетании с killне вернул ничего и заставил мой скрипт зависать на macOS Sierra. Но killportработает как шарм и быстрее. Спасибо!
Wout
4
Я создал функцию для этой цели.
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
Скопируйте и вставьте этот блок кода в свой терминал, чтобы освободить нужный порт. Просто не забудьте изменить номер порта в последней строке.
При выходе из программы, открывшей порт, порт будет автоматически закрыт. Если вы убьете процесс Java, на котором работает этот сервер, он должен это сделать.
Ответы:
Узнайте идентификатор процесса (PID), который занимает номер порта (например, 5955), который вы хотели бы освободить
Убейте процесс, который в данный момент использует порт, используя его PID
источник
kill PID
(что подразумевает -15), затем попробуйте -2 и -1. -9 - последнее средство, только если все остальные параметры не сработали.Чтобы найти процесс, попробуйте:
Убейте процесс, который в данный момент использует порт, используя его PID
а затем проверьте, закрыт ли порт. Если нет, попробуйте:
Я сделал бы только следующее, если предыдущий не работал
Просто чтобы быть в безопасности. Опять же, в зависимости от того, как вы открыли порт, это может не иметь значения.
источник
Однако, открыв порт, вы закрываете его таким же образом. Например, если вы создали сокет, привязали его к порту 0.0.0.0:5955 и вызвали listen, закройте тот же сокет.
Вы также можете просто убить процесс, у которого открыт порт.
Если вы хотите узнать, какой процесс имеет открытый порт, попробуйте это:
Если вы хотите узнать, открыт ли порт, вы можете выполнить ту же команду lsof (если у какого-либо процесса он открыт, он открыт; в противном случае это не так), или вы можете просто попытаться подключиться к нему, например:
Если он возвращается немедленно без вывода, порт не открыт.
Возможно, стоит упомянуть, что, технически говоря, это не открытый порт, а комбинация хост: порт. Например, если вы подключены к локальной сети как 10.0.1.2, вы можете привязать сокет к 127.0.0.1:5955 или 10.0.1.2:5955, без влияния одного из них на другой, или вы можете привязать к 0.0.0.0 : 5955 для обработки обоих одновременно. С помощью команды вы можете увидеть все адреса IPv4 и IPv6 вашего компьютера
ifconfig
.источник
очень просто найти порт 5900:
затем рассматривая 59553 в качестве PID
источник
В 2018 году вот что сработало для меня с использованием MacOS HighSierra:
sudo lsof -nPi: ваш номер порта
затем:
sudo kill -9 yourPIDnumber
источник
lsof -nPi
немного лучше, потому что номер порта на самом деле виден на выходе, и вы лучше понимаете, что вы убиваете.sudo lsof -nPi | grep LISTEN
Один лайнер лучше
Пример: на Mac хотел очистить порт 9604. Следующая команда работала как чудо
источник
Вы также можете использовать эту первую команду, чтобы убить процесс, которому принадлежит определенный порт:
Например, скажем, этот процесс содержит порт 8000 TCP, а затем запускает команду:
выведет строку, соответствующую порту 8000 процесса , например:
В этом случае procHoldingPort - это имя процесса, открывшего порт, 4683 - его pid, а 8000 (обратите внимание, что это TCP) - номер порта, который он содержит (который вы хотите закрыть).
Затем завершите процесс, следуя приведенному выше примеру:
Как уже упоминалось, если это не сработает (вы можете попробовать использовать kill с -9 в качестве аргумента):
Опять же, в общем, лучше избегать отправки SIGKILL (-9), если можете.
Ура,
Guy.
источник
Я использую в
lsof
сочетании сkill
, как уже упоминалось выше; но написал быстрый маленький скрипт bash для автоматизации этого процесса.С помощью этого скрипта вы можете просто печатать
killport 3000
из любого места, и он уничтожит все процессы, запущенные на порте3000
.https://github.com/xtrasimplicity/killport
источник
lsof
в сочетании сkill
не вернул ничего и заставил мой скрипт зависать на macOS Sierra. Ноkillport
работает как шарм и быстрее. Спасибо!Я создал функцию для этой цели.
Скопируйте и вставьте этот блок кода в свой терминал, чтобы освободить нужный порт. Просто не забудьте изменить номер порта в последней строке.
источник
попробуйте ниже, предполагая, что запущенный порт
8000
:Я нашел ссылку здесь
источник
При выходе из программы, открывшей порт, порт будет автоматически закрыт. Если вы убьете процесс Java, на котором работает этот сервер, он должен это сделать.
источник
Сначала выясните идентификатор Procees (pid), который занял требуемый порт (например, 5434).
PS Aux | grep 5434
2. убить этот процесс
источник