실행 중인 프로세스에 대한 Steamy PowerShell Get-Process Cmdlet

시스템의 실행 중인 프로세스를 표시하는 PowerShell Get-Process cmdlet을 사용하는 것에 관심이 있으신가요? Get-Process를 사용하여 프로세스 소유자, 프로세스 ID 또는 프로세스가 디스크 상의 어디에 있는지를 찾을 수 있습니다.

이 문서에서는 실제 예제를 통해 PowerShell의 Get-Process cmdlet을 사용하는 방법을 배우게 될 것입니다. Windows 또는 Linux에서 프로세스를 제어하여 원하는 대로 조작하는 것이 재미있는 일처럼 느껴진다면 계속해서 읽어보세요!

관련: Linux에서 ps, pgrep, pkill 등을 사용하여 프로세스를 종료하는 방법!

전제 조건

더 나아가기 전에, 이 문서의 예제를 따라하기 위해 필요한 전제 조건은 다음과 같습니다.

  • 대부분의 예제에는 Windows PowerShell 5.1이 충분하지만, Linux 지원을 위해서는 PowerShell 7.1 이상이 필요합니다.

관련: PowerShell 7로 업그레이드하는 방법

  • 이 문서는 Windows 10과 Ubuntu 20.04 LTS를 사용하지만, PowerShell이 실행되는 모든 운영 체제에서 작동합니다.

준비되셨나요? 프로세스를 관리해봅시다!

실행 중인 프로세스 표시

Get-Process는 로컬 프로세스를 관리합니다. 이 첫 번째 예제에서는 PowerShell Get-Process cmdlet을 사용합니다. 이 명령은 모든 실행 중인 프로세스를 표시합니다.

Get-Process는 시스템의 실행 중인 프로세스 정보의 현재 스냅샷을 반환합니다. 실시간 프로세스 정보를 표시하기 위해 Windows는 Windows 작업 관리자를 제공하고, Linux는 top 명령을 제공합니다.

시작하려면 PowerShell 콘솔을 열고 Get-Process를 실행하세요. Get-Process가 실행 중인 프로세스 정보를 반환하는 것을 알 수 있습니다. 아래에 표시된 것과 같이 출력 형식은 Windows 및 Linux 운영 체제에서 동일합니다.

Using the Get-Process cmdlet on Windows to display local processes.

기본적으로 gps 또는 psGet-Process의 명령 별칭으로 존재합니다. PowerShell 7은 크로스 플랫폼이므로 ps 명령은 내장된 Linux 명령과 충돌합니다. 따라서 ps는 Linux에서 작동하지 않으며 gps 별칭만 작동합니다.

Get-Process 출력의 의미는 즉시 명확하지 않을 수 있습니다. 기본 Get-Process 속성은 아래에서 자세히 설명됩니다.

  • NPM(K) – 프로세스가 사용하는 비페이지드 메모리 양을 킬로바이트 단위로 표시합니다. (K) 표기법으로 표시됩니다.
  • PM(M) – 프로세스가 사용하는 페이지 가능한 메모리 양을 메가바이트로 표시한 것입니다. (M) 표기법으로 표시됩니다.
  • WS(M) – 프로세스의 작업 집합 크기를 메가바이트로 표시한 것입니다. 작업 집합은 프로세스가 최근에 참조한 메모리 페이지로 구성됩니다.
  • VM(M) – 프로세스가 사용하는 가상 메모리 양을 메가바이트로 표시한 것입니다. 디스크의 페이징 파일에 저장된 내용을 포함합니다.
  • CPU(S) – 프로세스가 모든 프로세스에서 사용한 프로세서 시간을 초로 표시한 것입니다.
  • Id – 프로세스의 프로세스 ID (PID)입니다.
  • SI – 실행 중인 프로세스의 세션 식별자입니다. 세션 0은 프로세스가 모든 사용자에게 사용 가능하다는 것을 나타내고, 1은 프로세스가 첫 번째로 로그인한 사용자 아래에 있는 것을 나타냅니다.
  • ProcessName – 실행 중인 프로세스의 이름입니다.

전체 속성 이름과 매핑된 속성 별칭의 목록을 표시하려면 Get-Process | Get-Member -MemberType 'AliasProperty' 명령을 사용합니다.

아래는 또 다른 좋은 예입니다. brave 프로세스의 각 인스턴스를 찾아 해당 프로세스의 ID($_.id)를 사용하여 Get-NetTCPConnection에 전달합니다. PowerShell은 Get-NetTCPConnection을 사용하여 brave 프로세스가 열려 있는 각 네트워크 연결에 대한 정보를 찾습니다.

Brave 브라우저가 실행 중인 경우에는 PowerShell 세션에서 다음 코드를 실행하십시오.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

SystemFrontier의 Jay Adams에게 감사드립니다!

축하합니다. 이제 Windows 및 Linux에서 Get-Process를 사용하여 모든 실행 중인 프로세스를 볼 수 있습니다!

특정 프로세스 속성 찾기

Get-Process는 이전에 보았던 대로 많은 다양한 실행 중인 프로세스의 속성을 반환합니다. 다른 PowerShell 개체와 마찬가지로 개체의 속성을 선택적으로 선택할 수 있습니다.

이제 특정 프로세스의 특정 속성을 검색하는 간단한 예제를 따라해 보겠습니다:

  1. Windows 계산기를 실행하십시오.

2. PowerShell 콘솔을 열어 Name 매개변수를 사용하여 Calculator라는 이름의 모든 실행 중인 프로세스만 표시하도록 Get-Process를 실행하십시오. 이전에 본 것과 동일한 출력이 표시됩니다.

Get-Process -Name 'Calculator'

Get-Process는 기대한대로 많은 속성을 반환합니다. 아마도 CPU(s) 열 아래의 값으로 CPU 사용률만 찾고 싶을 수 있습니다. 아래에 표시된대로 Get-Process 명령을 괄호로 묶고 CPU 속성을 참조합니다. CPU 속성의 값만 반환되는 것을 확인할 수 있습니다.

(Get-Process -Name 'Calculator').CPU

Get-ProcessCPU(s)라는 이름의 속성을 반환하며, 위의 코드 조각은 CPU라는 이름을 사용했습니다. 때로는 PowerShell에서 출력에서 실제 속성 이름을 표시하지 않을 수 있습니다. 이 개념은 PS1XML 형식 파일을 사용하여 수행됩니다.

CPU 시간은 코어 간의 초 단위의 총합으로 표시됩니다. 이를 더 읽기 쉬운 숫자로 만들려면 아래에 표시된 대로 Math 메서드를 사용하여 소수점 첫째 자리까지 반올림하십시오.

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

위의 방법을 사용하여 Id와 같은 다른 속성도 찾을 수 있습니다. 프로세스의 ID만 보려는 경우에 사용할 수 있습니다.

계산기 애플리케이션을 실행한 상태로 유지하십시오. 이 애플리케이션은 이후의 예제에서 사용됩니다.

프로세스 메모리 사용량 가져오기

느린 시스템 문제 해결은 제한된 메모리로 인해 도전적일 수 있습니다. 계산기 앱을 사용하여 Calculator 프로세스를 검색하고 VM 속성만 표시하십시오. 아래에서 볼 수 있듯이, 사용된 메모리는 메가바이트(MB)로 표시됩니다.

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

기억 장치 사용량을 이해하기 위해 내장된 PowerShell 변환 배율을 사용하여 메가바이트(MB)를 기가바이트(GB)로 변경하세요. 아래 예제에서는 사용된 메모리를 GB로 변환한 후 .NET 수학 라이브러리Round 메서드를 사용하여 값을 반올림하는 방법을 아래 스크린샷에서 확인할 수 있습니다.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# .NET Math의 Round 메서드 사용
[Math]::Round($ProcessMemoryGB / 1GB)

값을 변환하기 위해 내장된 PowerShell 유틸리티를 사용하면 출력을 이해하기 쉬워집니다. 프로세스 ID를 찾는 방법에 대해 알아보려면 계속 읽어보세요.

Converting the calculator process memory usage to a rounded GB format.

알려지지 않은 속성 노출하기

Get-Process로 가져온 결과에는 기본적으로 모든 속성이 포함되거나 표시되지 않을 수 있습니다. 아래에서 PathUserName 속성에 대해 자세히 알아보고 사용하는 방법을 알아보세요!

프로세스 실행 파일 위치 찾기

시스템에는 프로세스 실행 파일을 저장할 수 있는 여러 위치가 있습니다. 현재 실행 중인 프로세스의 파일 시스템 경로를 찾는 것은 Get-Process를 사용하면 쉽지만, 기본적으로 Path가 표시되지 않습니다. 아래에서는 Path 속성이 프로세스 실행 파일의 파일 시스템 위치를 포함하고 있음을 보여줍니다.

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

Windows와 마찬가지로 Linux에서도 Get-Process는 파일 시스템 경로를 반환합니다. 아래 예시에서는 gnome-calculator 프로세스가 실행되고 콘솔 출력에 경로가 표시됩니다.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

책략적인 악의적인 행위자들은 신뢰할 수 있는 프로세스와 같거나 비슷한 이름을 가진 프로세스를 사용할 수 있습니다. 따라서 파일 시스템 경로를 찾을 수 있는 능력은 보안 사고 대응(IR) 시나리오에서 도움이 됩니다. 기본 출력에는 UserName이 포함되어 있지 않기 때문에 프로세스 소유자를 찾는 방법을 알아보세요.

프로세스 소유자 찾기

출력에 UserName 값을 포함하려면 IncludeUserName 매개변수를 사용해야 합니다. 특히 다른 사용자의 프로세스를 알지 못하고 종료하는 일을 방지하기 위해 프로세스 소유자를 알아야 합니다. 아래 예시에서는 UserName 속성이 프로세스 출력에 포함되어 있습니다.

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

마지막으로, 원격 컴퓨터에서 프로세스 정보를 검색하는 방법에 대해 알아보세요!

원격 컴퓨터에서 프로세스 찾기

Windows PowerShell에서는 Get-Process가 자체적으로 원격 기능을 가지고 있지 않지만, 항상 PowerShell RemotingInvoke-Command을 활용하여 원격 컴퓨터에서 실행할 수 있습니다.

관련: Windows와 Linux에서 PSRemoting 설정하는 방법

하지만, Linux에서 작동하거나 Windows에서 PowerShell 6을 실행 중인 경우, 이제 원격 컴퓨터의 프로세스를 조회하는 데 사용할 수 있는 ComputerName 매개 변수가 있습니다.

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

-ComputerName 매개 변수는 PowerShell 7.x에서 제거되었으며 해당 cmdlet은 원격 작업과 직접 관련이 없습니다. 동일한 작업을 수행하려면 다음과 같이 Invoke-Command으로 감싸야 합니다: Invoke-Command -ComputerName "컴퓨터이름" -ScriptBlock { Get-Process -ProcessName '프로세스' }

위 명령은 원격 컴퓨터에 대해 실행되면, Get-Process 명령이 로컬에서 실행된 것과 동일한 출력이 표시됩니다.

아래는 다른 컴퓨터로 원격 작업을 수행하고 실행 중인 프로세스를 가져오는 예제입니다:

Computer and Getting Running Processes

쉼표로 구분하여 여러 컴퓨터를 대상으로 지정할 수 있습니다. 예: Get-Process -ComputerName SRV1,SRV2.

다음 단계

이 문서에서는 Linux와 Windows 모두에서 PowerShell을 사용하여 로컬 및 원격 컴퓨터의 실행 중인 프로세스를 찾는 방법을 배웠습니다.

지금 이 지식으로 무엇을 할 것인가요? Get-Process로 검색한 프로세스를 로컬 또는 원격 컴퓨터에서 Stop-Process에 전달하여 종료해 보세요!

Source:
https://adamtheautomator.com/powershell-get-process/