원격 시스템에서 Windows 프로세스 종료하는 방법

어쩌면 원격 Windows 서버에서 행복하게 작업을 하고 있는데, 유용한 CPU 사이클을 사용하는 잘못된 프로세스를 발견했습니다. 그렇다면 무슨 일을 하면 좋을까요? 종료하세요!

이 자습서에서는 네이티브 유틸리티, 타사 유틸리티 및 PowerShell을 사용하여 Windows 프로세스를 종료하는 방법을 배우게 됩니다. 먼저 Windows에서 실행 중인 프로세스를 확인하는 방법을 배우고, 그런 다음 실행 중인 프로세스를 종료하는 방법을 알아보겠습니다.

사전 준비 사항

이 자습서의 단계를 따라하기 위해 다음 사항을 미리 준비하세요:

  • A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
  • A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
  • Microsoft의 Sysinternals Suite.
  • Windows PowerShell 5 이상. 이 자습서에서는 PowerShell v7.1.3을 사용합니다.

Tasklist를 사용하여 원격 Windows 프로세스 조회

Windows XP 이후로 tasklist라는 유용한 도구가 있습니다. Tasklist는 원격 컴퓨터의 프로세스를 조회하는 편리한 도구입니다. 프로세스를 종료하기 전에 먼저 프로세스를 발견해야 합니다!

데스크톱에서 PowerShell 세션 또는 명령 프롬프트를 열고 다음 명령을 입력하여 원격 컴퓨터에서 실행 중인 모든 프로세스를 표시합니다.

아래 명령은 원격 컴퓨터(/S)에 대한 쿼리를 수행하며 관리자 사용자 이름(/U)과 암호(/P)로 연결을 인증합니다.

tasklist /S WIN-BANGJIEFNOC.local.net /U administrator /P password

아래에서 세션 이름이 나타나지 않음을 알 수 있습니다. 원격 컴퓨터에서 tasklist를 실행 중이기 때문에 tasklist세션 이름을 제공하지 않습니다.

list of processes on a remote server

아마도 단일 프로세스만 나열하는 것이 좋을 것입니다. 문제가 되지 않습니다. 이를 위해 /FI 매개변수를 지정하십시오. /FI 매개변수는 tasklist에 전달되어 특정 프로세스를 필터링하는 쿼리를 허용합니다.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
The output of tasklist showing a specific process

PSList를 사용하여 원격 Windows 프로세스 쿼리

실행 중인 프로세스를 보기 위한 다른 도구는 PSList이며, 이 유틸리티는 Sysinternals Suite의 일부입니다. 이 도구 모음은 많은 해 동안 존재해 왔으며 Azure의 CTO 인 Mark Russinovich에 의해 만들어졌습니다!

이제 원격 컴퓨터에서 실행 중인 프로세스를 볼 수 있는 방법에 대해 시작해 봅시다.

1. 데스크톱에서 PowerShell 세션 또는 명령 프롬프트를 열고 Sysinternal Suite를 추출한 디렉토리로 디렉토리를 변경하십시오.

2. PowerShell 세션에서 다음 명령을 실행하여 원격 컴퓨터에서 실행 중인 프로세스와 관련된 CPU 사용량을 실시간으로 표시하십시오.

아래 명령은 pslist를 실행하여 WIN-BANGJIEFNOC 컴퓨터에서 모든 원격 Windows 프로세스를 쿼리하는 명령입니다. Administrator 사용자 이름(-u)과 암호(-p)를 인증합니다.

이 명령은 -s 스위치를 사용하여 pslist를 “작업 관리자 모드”로 변환하여 목록을 반복적으로 업데이트합니다.

Sysinternals 도구를 처음 사용하는 경우 EULA를 수락하라는 배너가 나타날 수 있습니다. OK를 클릭하십시오.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -s

이 명령을 실행한 결과는 다음과 같습니다. 이 문서에서는 이 값 중 3개에 관심이 있습니다. 아래와 같이 표시됩니다.

  • 이름: 프로세스의 이름입니다.
  • Pid: 프로세스 식별자로, 이 튜토리얼에서 중요한 값입니다. PID 번호는 원격 프로세스를 종료하는 데 사용될 수 있습니다. 이는 프로세스에 할당된 숫자식 식별자입니다.
  • CPU: 이는 실시간으로 사용 가능한 CPU의 사용량을 보여줍니다.

다른 값들은 메모리 관련이며 이 문서의 범위를 벗어납니다.

Output in real-time of pslist

3. 두 번째 단계에서 -s 스위치를 사용했으므로 pslist를 종료하려면 Ctrl-C를 누르십시오.

프로세스 이름 뒤에 -e 스위치를 사용하여 반환된 프로세스 목록을 좁힙니다. 예를 들어, -e Winlogon입니다.

프로세스 이름으로 프로세스 종료하기 – PSKill를 사용하여

원격 프로세스를 찾는 방법을 알았으니, 이제는 이를 종료하는 방법에 대해 알아봅시다. 먼저, pskill 유틸리티에 대해 알아보겠습니다. 먼저 프로세스 이름으로 프로세스를 종료하는 방법을 배워보세요.

1. 원격 서버에서 종료할 프로세스가 있는지 확인합니다. 이 튜토리얼에서는 메모장 프로세스를 사용합니다.

2. 로컬 데스크톱에서 PowerShell 세션 또는 명령 프롬프트를 열고 Sysinternal Suite를 추출한 디렉토리로 이동한 다음 다음 명령을 실행합니다. pskill의 구문이 pslist와 유사함을 확인할 수 있습니다.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p 'password' -e notepad.exe
Output of pskill

3. 이제 이전 섹션에서 설명한대로 pslist을 실행하여 프로세스가 실제로 중지되었는지 확인합니다.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -e notepad.exe
Output of pslist

프로세스 ID로 프로세스 종료하기 – PSKill를 사용하여

이름으로 프로세스를 종료하는 것은 해당 프로세스의 단일 인스턴스만 실행 중인 경우나 해당 이름으로 모든 프로세스를 종료하려는 경우에는 충분할 수 있습니다. 그러나 실행 중인 프로세스의 특정 인스턴스를 종료하려면 어떻게 해야 할까요? 다음 단계에서 이를 설명하겠습니다.

1. 원격 서버에서 메모장을 두 번 엽니다. 이 중 하나의 프로세스를 종료할 것입니다. 물론 다른 프로세스로 대체할 수도 있습니다.

2. 다음 명령을 실행하고 다음 단계를 위해 하나의 Pid를 주의하여 표시된 것을 확인하세요.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p password -e notepad
Using pslist to list PID’s of Notepad

3. PID를 사용하여 마지막 인수로 PID를 제공하여 pskill을 실행하세요.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p password 1984
The output of pskill for a particular PID

4. 마지막으로 pslist를 다시 실행하여 현재 실행 중인 메모장 인스턴스가 하나인지 확인하십시오. 이제 메모장이 하나만 실행되는 것을 확인해야합니다.

Output of pslist

이름으로 원격 Windows 프로세스 종료하기

taskkill 유틸리티는 Windows에 기본 제공되며 사용자 이름 및 응용 프로그램 이름으로 프로세스를 다시 시작하는 추가 명령 줄 옵션을 포함합니다. 이제 메모장을 다시 종료해 봅시다!

이름으로 프로세스 종료하기

1. 원격 서버에서 메모장을 엽니다. 이 시연에서 종료할 프로세스는 메모장입니다. 물론 다른 프로세스로 대체할 수 있습니다.

2. 데스크톱에서 PowerShell 세션 또는 명령 프롬프트를 엽니다. 다음 명령을 입력하여 notepad.exe를 종료할 수 있습니다.

taskkill /S WIN-BANGJIEFNOC.local.net /you administrator /p password /IM notepad.exe

출력은 아래와 같습니다:

/IM은 이미지를 나타내는 매개변수입니다. 이 경우 notepad.exe입니다.

The output of taskkill command

3. 프로세스가 중지되었는지 확인하려면 tasklist를 실행하십시오. 이제 해당 필터와 일치하는 작업이 없는 것을 확인할 수 있습니다.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
Output of tasklist using imagename

PID를 사용하여 원격 Windows 프로세스 종료하기

taskkill을 사용하여 PID로 프로세스를 종료하는 것은 프로세스 이름을 사용하는 것과 크게 다르지 않습니다. 그러나 이름을 사용할 수 없으므로 먼저 PID를 찾은 다음 해당 PID를 taskkill에 전달해야 합니다.

원격 Windows 호스트에서 메모장이 실행 중이라고 가정합니다:

1. 아래에 표시된대로 tasklist를 실행하여 메모장 프로세스의 PID를 찾으세요. 아래에 표시된대로 PID 중 하나를 메모하세요. 다음 단계에서 필요합니다.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
the output of tasklist to view PIDS

2. 이제 PID를 마지막 인수로 제공하여 taskkill을 실행하세요.

taskkill /S WIN-BANGJIEFNOC.local.net /u administrator /p 'password' /PID 3776
The output of taskkill specifying a particular PID

3. 마지막으로 프로세스가 중지되었는지 확인하기 위해 tasklist를 실행하세요.

Output of tasklist

PowerShell을 사용하여 원격 Windows 프로세스 종료

PowerShell을 사용하면 원격 프로세스를 종료하는 데 몇 가지 옵션이 있습니다. 첫 번째 cmdlet인 Stop-Process는 원격 프로세스를 기본적으로 종료할 수 없습니다. 컴퓨터 이름을 지정할 수 있는 옵션이 없기 때문입니다. 그러나 Stop-Process를 원격으로 실행하여 이 문제를 해결할 수 있습니다. PowerShell Remoting을 통해 원격으로 실행합니다.

1. 호스트 및 원격 서버가 Active Directory 도메인에 없는 경우 먼저 사용자 이름과 암호를 제공하여 PSCredential 개체를 만듭니다.

$credentials = Get-Credential
Setting up credentials

2. 다음으로, 자습서에서 원격 컴퓨터에 SSL을 사용하여 연결하고 자체 서명된 인증서를 사용할 것이므로, 신뢰할 수 있는 인증 기관을 위한 인증서 확인을 건너뛰는 PSSessionOption을 생성합니다.

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. 이제 Enter-PSSession 명령을 사용하여 서버에 연결합니다. 이 명령은 원격 서버에 대한 대화형 세션을 설정합니다.

아래 명령은 위에서 제공된 사용자 이름과 암호(Credential)를 사용하여 WIN-BANGJIEFNOC.local.net 컴퓨터에 연결하며, 인증서 확인을 건너뛰고(SessionOption), SSL을 통해 연결합니다(UseSSL).

Enter-PSSession -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -SessionOption $PSSessionOption -UseSSL
Using Enter-PsSession for an interactive session

4. 원격 호스트에 연결한 후, 종료하려는 프로세스를 확인하기 위해 Get-Process를 실행합니다. 이 경우 notepad 프로세스를 볼 수 있습니다.

Get-Process -ProcessName Notepad
Output of Get-Process

5. 이 프로세스를 종료하려면 아래와 같이 Stop-Process를 실행합니다.

Stop-Process -ProcessName Notepad

6. 마지막으로, 프로세스를 종료했는지 확인하기 위해 Get-Process를 다시 실행하고 오류 메시지를 받아야 합니다.

Checking for Notepad as a running process

원격 Windows 프로세스를 비대화식으로 중지하려면 다음 매개변수를 사용하여 Invoke-Command 명령을 사용합니다 : Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL. Stop-Proces 명령을 ScriptBlock 매개변수에 캡슐화하면 명령이 원격 호스트로 전송됩니다.

결론

네트워크 프로세스를 종료하는 다양한 방법과 네트워크 방화벽 규칙이 유틸리티의 올바른 작동을 방해할 수 있는 상황을 극복하는 방법에 대해 배웠으며, 이 튜토리얼은 Windows를 수정하는 데 도움이 되었을 수도 있습니다.

배운 유틸리티는 강력한 도구이므로 주의해서 사용하십시오!

Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/