Как мне найти (и уничтожить) процессы, которые прослушивают / используют мои порты tcp? Я на Mac OS X
Иногда, после сбоя или некоторой ошибки, мое приложение rails блокирует порт 3000. Я не могу найти его с помощью ps -ef ...
При выполнении
rails server
я получил
Адрес уже используется - bind (2) (Errno :: EADDRINUSE)
2014 обновление:
Чтобы завершить некоторые из ответов ниже: После выполнения команд kill может потребоваться удаление файла pid. rm ~/mypath/myrailsapp/tmp/pids/server.pid
function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }
Ответы:
Ты можешь попробовать
netstat
Для macOS El Capitan и новее (или если ваш netstat не поддерживает
-p
), используйтеlsof
Для Centos 7 использовать
источник
lsof -t -i tcp:#{ARGV.first} | xargs kill
)lsof -t -i tcp:1234 | xargs kill
~/.bash_profile
:findandkill() { port=$(lsof -n -i4TCP:$1 | grep LISTEN | awk '{ print $2 }') kill -9 $port } alias killport=findandkill
так что теперь мне просто нужно набратьkillport 8080
текст, и это экономит мне несколько секундsudo
перед lsof, если вы не видите никаких результатов-P
кlsof
команде , так что исходный порт виден на выходе:lsof -P -i:3000
Найти:
Убийство:
источник
kill -15 <PID>
прежде чем прибегнуть к-9
безопасности.kill <PID>
недостаточно / опасно / неполноценно?kill -15
дает возможность очистить процесс после себя.-9
делает.Ничто из вышеперечисленного не помогло мне. Любой другой с моим опытом может попробовать следующее (работал для меня):
Запустить:
затем проверьте статус сообщенного PID:
наконец-то, "смирись с этим":
источник
kill -TERM
(или простоkill
) раньшеkill -QUIT
. Не каждый процесс собирается сделать корректное завершение работы SIGQUIT.Однострочное извлечение PID процесса с использованием порта 3000 и его уничтожение.
Флаг -t удаляет все, кроме PID, из вывода lsof, что упрощает его уничтожение.
источник
lsof -ti:3000 -sTCP:LISTEN
Самое простое решение :
Для одного порта:
Убить несколько портов с помощью одной строки:
82500 (идентификатор процесса / PID)
82499
82499 82500
Завершает процессы 82499 и 82500 в одной команде.
Для использования этого в
package.json
скриптах:"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }
источник
Эту единственную командную строку легко запомнить:
npx kill-port 3000
Для более мощного инструмента с поиском:
npx fkill-cli
PS: они используют сторонние пакеты javascript.
npx
поставляется с Node.js.Источники: твит | GitHub
источник
npx
поставляется вместеnpm
сnode.js
комплектом, так что это не отдельный пакет. Просто обновите ваш node.js и ваши версии npm.Вы можете использовать
lsof -i:3000
.Это «Список открытых файлов». Это дает вам список процессов и какие файлы и порты они используют.
источник
lsof -i:3000
.В вашем
.bash_profile
, создайте ярлык дляterminate
процесса 3000:Затем позвоните,
$terminate
если он заблокирован.источник
Чтобы принудительно убить такой процесс, используйте следующую команду
Где 3000 - номер порта, на котором запущен процесс
это возвращает идентификатор процесса (PID) и запуска
Замените PID на число, которое вы получите после выполнения первой команды
источник
Это даст вам только pid, протестированный на MacOS.
источник
lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9
Выполните в командной строке на OS-X El Captain:
Краткая опция lsof возвращает только PID.
источник
Одним из способов уничтожения процесса в порту является использование библиотеки python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). После установки просто:
источник
lsof -t -i:3000
.. кажется ненужной.Чтобы просмотреть процессы, блокирующие порт:
netstat -vanp tcp | grep 3000
Убить процессы, блокирующие порт:
kill $(lsof -t -i :3000)
источник
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
оно будет работать в большинстве дистрибутивов Linux3000
занят. Однако, если ни один процесс не блокирует порт, вы получитеkill: not enough arguments
ошибку.netstat -vanp tcp | grep 3000
для своего занятого порта?bash
иzsh
оболочке. У меня отлично работает. Не уверен, почему это не работает для вас. Может быть, что-то с Высшей Сьеррой? Я понятия не имею: /Найти открытое соединение
Убить по идентификатору процесса
источник
Найди и убей:
Эта единственная командная строка проста и работает правильно.
источник
Возможные способы достижения этого:
Вверх
Команда top - это традиционный способ просмотреть использование ресурсов вашей системы и увидеть процессы, которые занимают большинство системных ресурсов. В верхней части отображается список процессов, причем те, которые используют наибольшее количество процессоров, находятся вверху.
п.с.
Команда ps выводит список запущенных процессов. Следующая команда выводит список всех процессов, запущенных в вашей системе:
Вы также можете передать вывод через grep для поиска определенного процесса без использования каких-либо других команд. Следующая команда будет искать процесс Firefox:
Наиболее распространенный способ передачи сигналов программе - команда kill.
Lsof
Список всех открытых файлов и процессов, которые их открыли.
или
источник
lsof -i tcp:port_number
- перечислит процесс, запущенный на этом портуkill -9 PID
- убьет процессв вашем случае это будет
lsof -i tcp:3000
с вашего терминала найдите PID процессаkill -9 PID
источник
Эти две команды помогут вам найти и убить процесс сервера
источник
Добавить к
~/.bash_profile
:Тогда
source ~/.bash_profile
и бегиkillTcpListen 8080
источник
Используя инструмент fkill от sindresorhus , вы можете сделать это:
источник
TL; DR:
Если вы находитесь в ситуации, когда порт используют как клиенты, так и серверы, например:
тогда вы, вероятно, не хотите убивать обоих.
В этой ситуации вы можете использовать
-sTCP:LISTEN
только показ pid процессов, которые слушают. Комбинируя это с-t
кратким форматом, вы можете автоматически убить процесс:источник
Я сделал небольшую функцию для этого добавьте его в файл гс (
.bashrc
,.zshrc
или любой другой )тогда вы можете просто набрать,
kill-by-port 3000
чтобы убить ваш сервер rails (подставив 3000 для любого порта, на котором он работает)в противном случае вы всегда можете просто набрать
kill -9 $(cat tmp/pids/server.pid)
из корневого каталога railsисточник
\$PORT
чтобы сообщение отображалось правильно. В остальном прекрасно работает!Чтобы убить несколько портов.
Надеюсь, это поможет!
источник
Вы должны попробовать это, этот метод не зависит от ОС.
В стороне вашего приложения есть папка с именем tmp, внутри которой есть еще одна папка с именем pids. Этот файл содержит файл pid сервера. Просто удалите этот файл. Порт автоматически убивает себя.
Я думаю, что это простой способ.
источник
Вот вспомогательная функция bash для уничтожения нескольких процессов по имени или порту
Применение:
Пример:
источник
Вы можете попробовать это
источник
Если вы хотите свободный от кода код - откройте диспетчер активности и принудительно уничтожьте узел :)
источник
Я использую это:
cat tmp/pids/server.pid | pbcopy
затем
kill -9 'paste'
источник
Шаг 1: Найти сервер, который работает:
ps aux | grep puma
Шаг 2: Убить этот сервер Kill -9 [номер сервера]источник
В Mac OS
kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')
источник