Omawiam ten proces wiele razy. Muszę zabić proces na komputerze z systemem Windows i po prostu znam jego port. Zwykle kroki są następujące: Znajdź PID, patrząc na porty (przykładowy port 8084) Wymień procesy działające na portach
netstat -a -o -n
A następnie zabij proces na tym porcie za pomocą następującego polecenia
taskkill /F /PID <pid>
Czy istnieje coś takiego jak potok lub podobny element, którego można użyć w systemie operacyjnym Windows do uruchomienia tego polecenia w jednym wierszu !?
findstr
(Windowsgrep
). Na przykład:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Może to przybliża cię o krok;)findstr
: może pasować do lokalnego lub zdalnego numeru portu. (Przyjmując, że Q nie określa, które).Odpowiedzi:
Zarówno
cmd.exe
i PowerShell obsługują potoki z jednego polecenia do drugiego. W PowerShell coś podobnego (powinien znajdować się w jednym wierszu w wierszu poleceń lub użyj `, aby wstawić znaki nowej linii w skrypcie):Gdzie:
Select -skip 4
pomija pierwsze cztery linie nagłówka. (Select
jest skrótem odSelect-Object
używanego do wykonywania SQL SELECT podobnie jak projektów obiektów.%
jest skrótem odForeach-Object
którego wykonuje blok skryptu na każdym obiekcie ($_
) w potoku i wysyła wyniki bloku skryptu do potoku. Tutaj najpierw rozbija dane wejściowe na tablicę pól, a następnie tworzy nowy obiekt z dwiema właściwościami, z którychOriginal
utworzono ciągnetstat
iFields
tablicę.?
jest skrótem, dlaWhere-Object
którego filtry oparte na wyniku bloku skryptu. Tutaj dopasowanie wyrażenia regularnego na końcu drugiego pola (wszystkie kontenery PowerShell są zerowane).(Wszystkie przetestowane oprócz ostatniego elementu: Nie chcę zaczynać procesów zabijania :-)).
W praktyce uprościłbym to, np. zwracanie tylko 0 lub PID od pierwszego
foreach
(który zostałby zaprojektowany w celu zignorowania nagłówków) i filtrowanie wartości niezerowej przed wywołaniemtaskkill
. Byłoby to szybsze pisanie, ale trudniejsze do naśladowania bez znajomości PowerShell.źródło
netstat
. Prowadzi to do (prawdopodobnie nieszkodliwego) błęduERROR: The process "12345" not found.
.taskkill /F /PID [PID]
. Dzięki temu ktoś może ręcznie zabijać zadania, o ile ma sposób na uzyskanie PID.Otwórz wiersz polecenia i wykonaj:
Jeśli chcesz to zrobić w .bat, zamień % a na %% a .
Jeśli chcesz tylko zabić tego, który nasłuchuje na tym porcie, dołącz (^ | znajdź „LISTENING”) na końcu drugiego znaleziska.
źródło
Oto wygodna funkcja, której możesz użyć:
https://github.com/majkinetor/posh/blob/master/MM_Network/Stop-ProcessByPort.ps1
źródło