Как я могу удалить текущий процесс / приложение, которое уже назначено порту?
Например: localhost:8080
Как я могу удалить текущий процесс / приложение, которое уже назначено порту?
Например: localhost:8080
Ответы:
Шаг 1:
Откройте cmd.exe (примечание: вам может потребоваться запустить его как администратор, но это не всегда необходимо), а затем выполните следующую команду:
netstat -ano | findstr :PORT_NUMBER
(Замените PORT_NUMBER на номер порта, который вы хотите, но оставьте двоеточие)
Область, обведенная красным, показывает PID (идентификатор процесса). Найдите PID процесса, который использует нужный порт.
Шаг 2:
Далее выполните следующую команду:
taskkill /PID PID /F
(На этот раз без двоеточия)
Наконец, вы можете проверить, была ли операция успешной или нет, повторно выполнив команду в «Шаге 1». Если все прошло успешно, вы не увидите больше результатов поиска по этому номеру порта.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Шаг 1 (то же самое в принятом ответе, написанном KavinduWije ):
netstat -ano | findstr :yourPortNumber
Измените на шаге 2:
tskill typeyourPIDhere
Примечание : taskkill
не работает в некоторых терминалах git bash
С помощью стандартных инструментов Windows 10:
Откройте Windows PowerShell от имени администратора
Найти PID (ProcessID) для порта 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777
Убить зомби процесс:
taskkill /f /pid 77777
где "77777" - ваш PID
set /p port="Enter port: "
-> Порт ввода FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> Извлекает PID в переменную taskkill /f /pid %ProcessId%
-> Убивает задачу cmd /k
-> Держит окно открытым
Если вы используете GitBash
Шаг первый:
netstat -ano | findstr :8080
Шаг второй:
taskkill /PID typeyourPIDhere /F
( /F
принудительно завершает процесс)
В Windows PowerShell версии 1 или новее для остановки процесса на порту 3000 введите:
Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force
Как подсказывает @morganpdx, здесь больше PowerShell-иш, лучшая версия:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000). OwningProcess -Force
'Stop-Process' is not recognized as an internal or external command,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
Для использования в командной строке:
for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a
Для использования в bat-файле:
for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Если вы уже знаете номер порта, возможно, будет достаточно отправить сигнал завершения работы программы (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
.
Я запускал zookeeper в Windows и не смог остановить ZooKeeper, работающий на порте 2181, используя zookeeper-stop.sh, поэтому попробовал этот метод двойной косой черты "//" для taskkill. Это сработало
1. netstat -ano | findstr :2181
TCP 0.0.0.0:2181 0.0.0.0:0 LISTENING 8876
TCP [::]:2181 [::]:0 LISTENING 8876
2.taskkill //PID 8876 //F
SUCCESS: The process with PID 8876 has been terminated.
Если вы используете Windows Terminal, то процесс убийства может быть немного менее утомительным. Я использую терминал Windows и kill PID
отлично работаю, чтобы убить процессы в порту, так как новый терминал Windows поддерживает определенные команды bash. Например:kill 13300
Итак, весь процесс будет выглядеть так:
netstat -ano | findstr :PORT
kill PID
Например:
PS C:\Users\username> netstat -ano | findstr :4445
TCP 0.0.0.0:4445 0.0.0.0:0 LISTENING 7368
TCP [::]:4445 [::]:0 LISTENING 7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>
Посмотрите, когда я набрал первую команду для вывода списка процессов в порту, он вернулся пустым. Это означает, что все процессы сейчас убиты.
kill
. Я напишу здесь, если найду.
Если вы хотите сделать это с помощью Python: проверьте, возможно ли в python завершить процесс, который прослушивает определенный порт, например 8080?
Ответ от Smunk работает хорошо. Я повторяю его код здесь:
from psutil import process_iter
from signal import SIGTERM # or SIGKILL
for proc in process_iter():
for conns in proc.connections(kind='inet'):
if conns.laddr.port == 8080:
proc.send_signal(SIGTERM) # or SIGKILL
continue
Однолинейное решение с использованием GitBash :
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`
Замените 8080 на порт, который слушает ваш сервер.
Если вам нужно использовать его часто, попробуйте добавить к вашей ~/.bashrc
функции:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
и просто беги
killport 8080
Этого можно избежать, просто перезапустив IIS с помощью следующей команды:
IISRESET