나는이 과정을 여러 번 겪고있다. Windows 시스템에서 프로세스를 종료해야하며 포트를 알고 있습니다. 일반적으로 단계는 다음과 같습니다. 포트를보고 PID를 찾으십시오 (예 : 포트 8084) 포트에서 실행중인 프로세스를 나열하십시오.
netstat -a -o -n
그런 다음 다음 명령을 사용하여 해당 포트에서 프로세스를 종료하십시오.
taskkill /F /PID <pid>
Windows OS에서이 명령을 한 줄에 실행할 수있는 파이프 나 이와 유사한 것이 있습니까?
답변
Windows OS에서이 명령을 한 줄에 실행할 수있는 파이프 나 이와 유사한 것이 있습니까?
모두 cmd.exe
하나의 명령에서 다른 및 PowerShell을 지원 파이프. PowerShell에서 (명령 줄에서 한 줄에 있거나 스크립트에서 줄 바꿈을 이스케이프하려면`를 사용해야 함) :
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
어디:
Select -skip 4
처음 네 개의 헤더 행을 건너 뜁니다. ( 객체 프로젝트와 같은 SQL SELECT를 수행Select
하는Select-Object
데 사용됩니다.%
파이프 라인의Foreach-Object
각 객체 ($_
) 에 대해 스크립트 블록을 수행하고 스크립트 블록 의 결과를 파이프 라인에 출력하는 축약 형입니다 . 여기에서는 먼저 입력을 필드 배열로 나누고Original
문자열netstat
과Fields
배열이 만든 두 가지 속성으로 새로운 객체를 만듭니다 .?
Where-Object
스크립트 블록의 결과를 기반으로하는 필터의 줄임말입니다 . 두 번째 필드의 끝에 정규 표현식을 일치시킵니다 (모든 PowerShell 컨테이너는 0을 기준으로 함).
(마지막 요소를 제외한 모든 테스트 : 프로세스 종료를 시작하고 싶지 않습니다 :-)).
실제로, 예를 들어 이것을 단순화 할 것입니다. 첫 번째 foreach
(헤더를 무시하도록 설계 됨) 에서 0 또는 PID 만 반환 하고 호출하기 전에 0이 아닌 값을 필터링합니다 taskkill
. PowerShell을 모르면 입력하기가 더 빠르지 만 따르기가 더 어려워집니다.
답변
명령 프롬프트를 열고 다음을 실행하십시오.
for /f "tokens=5" %a in ('netstat -aon ^| find "8080"') do taskkill /f /pid %a
.bat에서 수행하려면 % a 를 %% a로 바꾸십시오 .
해당 포트에서 수신 대기중인 포트를 종료하려면 다른 포트의 끝에 추가하십시오 (^ | 찾기 “LISTENING”).
답변
사용할 수있는 편리한 기능은 다음과 같습니다.
https://github.com/majkinetor/posh/blob/master/MM_Network/Stop-ProcessByPort.ps1
killp 8081