Я иду над этим процессом много раз. Я должен убить процесс на компьютере с Windows, и я просто знаю его порт. Обычно шаги следующие: найдите PID, посмотрев на порты (например, порт 8084). Перечислите процессы, запущенные на портах.
netstat -a -o -n
А затем убить процесс на этом порту с помощью следующей команды
taskkill /F /PID <pid>
Есть ли что-то вроде конвейера или чего-то подобного, что я могу использовать в ОС Windows для запуска этой команды в одну строку !?
findstr
(Windowsgrep
). Например:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Может быть, это делает вас на шаг ближе;)findstr
: может совпадать с номером локального или удаленного порта. (Принятие, что Q не определяет, какой.)Ответы:
И
cmd.exe
PowerShell, и PowerShell поддерживают каналы от одной команды к другой. В PowerShell что-то вроде (это должно быть в одной строке в командной строке или использовать `для экранирования строк в скрипте):Где:
Select -skip 4
пропускает первые четыре строки заголовка. (Select
сокращенноSelect-Object
используется для выполнения SQL SELECT как проекты объектов.%
это сокращение,Foreach-Object
которое выполняет блок скрипта для каждого объекта ($_
) в конвейере и выводит результаты блока скрипта в конвейер. Здесь сначала разбиваются входные данные на массив полей, а затем создается новый объект с двумя свойствами,Original
из которых строкаnetstat
иFields
только что созданный массив.?
является сокращением, дляWhere-Object
которого фильтры основаны на результате блока скрипта. Здесь соответствие регулярному выражению в конце второго поля (все контейнеры PowerShell начинаются с нуля).(Все протестировано, кроме последнего элемента: я не хочу начинать процессы уничтожения :-)).
На практике я бы упростил это, например. возвращая только 0 или PID от первого
foreach
(который был бы разработан, чтобы игнорировать заголовки) и фильтровать по значению, отличному от нуля, перед вызовомtaskkill
. Это будет быстрее набирать, но сложнее следовать, не зная PowerShell.источник
netstat
. Это приводит к (вероятно, безвредной) ошибкеERROR: The process "12345" not found.
.taskkill /F /PID [PID]
. При этом кто-то может вручную убивать задачи, если у него есть способ получить PID.Откройте командную строку и выполните:
Если вы хотите сделать это в .bat, замените % a на %% a .
Если вы просто хотите убить того, кто прослушивает этот порт, добавьте (^ | find "LISTENING") в конце другого find.
источник
Вот удобная функция, которую вы можете использовать:
https://github.com/majkinetor/posh/blob/master/MM_Network/Stop-ProcessByPort.ps1
источник