개요
Get-Process/Stop-Process는 현재 컴퓨터에서 실행 중인 프로세스를 조회하고 종료하는 cmdlet으로, GUI의 작업 관리자를 명령줄로 옮겨온 것과 같다. Part 11(원격 관리)에서 다른 컴퓨터를 다루는 법을 배웠다면, 이 장부터는 다시 로컬 컴퓨터로 돌아와 시스템 자체를 들여다보는 Part 12(프로세스·서비스·예약 작업)를 시작한다. Get-Process가 반환하는 것은 .NET의 System.Diagnostics.Process 객체 그대로라, 10장에서 강조한 객체 파이프라인의 힘을 시스템 관리에도 그대로 적용할 수 있다.
정신 모델은 “각 프로세스는 이름·ID·메모리 사용량 같은 속성과, 종료 같은 동작(메서드)을 함께 가진 객체"라는 것이다. Stop-Process는 사실 이 객체의 .Kill() 메서드를 cmdlet 형태로 감싼 것에 가깝다.
사용법
| |
종류
| 매개변수/속성 | 설명 |
|---|---|
-Name | 프로세스 이름으로 조회(와일드카드 지원) |
-Id | 정확한 프로세스 ID(PID)로 조회, $PID는 현재 세션 자체의 PID |
-IncludeUserName | 프로세스 소유자를 UserName 속성으로 추가(관리자 권한 필요할 수 있음) |
-Module / -FileVersionInfo | 프로세스가 로드한 모듈, 실행 파일의 버전 정보 조회(반환 타입이 Process가 아니게 됨) |
| 기본 표시 열 | NPM(K)(비페이징 메모리), PM(M)(페이징 메모리), WS(M)(작업 집합), CPU(s), Id, ProcessName |
예시
| |
주의사항·함정
기본 표시 값은 바이트가 아니라 KB/MB 단위로 반올림된 것이다: 화면에 보이는 NPM(K), WS(M) 열은 사람이 읽기 좋게 단위를 바꾼 값이라, 점 표기법(.)으로 실제 속성값($proc.WorkingSet)에 접근하면 항상 바이트 단위의 원래 숫자가 나온다. 정확한 계산이 필요하다면 화면 표시가 아니라 속성값을 직접 참조해야 한다.
-Module이나 -FileVersionInfo를 쓰면 결과가 더 이상 Process 객체가 아니다: 이 매개변수들은 각각 ProcessModule, FileVersionInfo 타입을 반환하므로, 그 결과를 곧바로 Stop-Process에 파이프하면 실패한다 — 종료하려는 프로세스 객체가 필요하다면 별도로 다시 Get-Process를 호출해야 한다.
Stop-Process는 기본적으로 확인 없이 즉시 종료를 시도하며, 저장하지 않은 데이터는 사라질 수 있다: 26장에서 배운 -WhatIf/-Confirm으로 실행 전 미리 확인하는 습관이 특히 이 cmdlet에서 중요하다 — 잘못된 PID를 지정하면 사용자가 작업 중이던 다른 프로그램이 예고 없이 종료될 수 있다.
다른 사용자가 소유한 프로세스를 종료하려면 관리자 권한이 필요하다: 일반 사용자 권한으로 다른 계정 소유의 프로세스에 Stop-Process를 시도하면 접근 거부 오류가 난다. -IncludeUserName으로 소유자를 먼저 확인하는 습관이 이런 실패를 예측하는 데 도움이 된다.
이식성: Bash의 ps(조회)와 kill(종료), CMD의 tasklist/taskkill이 각각 대응한다. kill -9가 Stop-Process -Force와 같은 “강제 종료” 개념이다. PowerShell의 차이는 조회 결과가 텍스트 표가 아니라 Sort-Object·Where-Object로 즉시 재가공할 수 있는 객체 컬렉션이라는 점이다.
![Featured image of post [PowerShell] 89. Get-Process/Stop-Process — 프로세스 관리](/post/powershell/get-stop-process-command-powershell/wordcloud_hu_c154775ff7700bc2.webp)
![[PowerShell] 87. Copy-Item -ToSession/-FromSession — 원격 파일 전송](/post/powershell/copy-item-tosession-fromsession-powershell/wordcloud_hu_f0a496ccacaca52b.webp)
![[PowerShell] 88. SSH 기반 PowerShell Remoting(크로스플랫폼)](/post/powershell/ssh-remoting-cross-platform-powershell/wordcloud_hu_47753be953b04c31.webp)
![[PowerShell] 89. Get-Process/Stop-Process — 프로세스 관리](/post/powershell/get-stop-process-command-powershell/wordcloud_hu_35ba97214ccb33be.webp)
![[PowerShell] 90. Start-Process — 외부 프로그램 실행](/post/powershell/start-process-external-program-powershell/wordcloud_hu_bd96568dcd900372.webp)
![[PowerShell] 91. Get-Service와 서비스 시작/중지/재시작](/post/powershell/get-start-stop-restart-service-powershell/wordcloud_hu_592e6189f836acb0.webp)
![[PowerShell] 11. Get-Member — 객체 구조 탐색](/post/powershell/get-member-command-object-structure-powershell/wordcloud_hu_63da05e55c117b81.webp)
![[PowerShell] 12. Where-Object — 필터링](/post/powershell/where-object-command-filter-pipeline-powershell/wordcloud_hu_75843f29a19f2cc5.webp)
![[PowerShell] 13. Select-Object — 속성 선택과 투영](/post/powershell/select-object-command-property-projection-powershell/wordcloud_hu_edd09be1027d5ea6.webp)
![[PowerShell] 14. Sort-Object — 정렬](/post/powershell/sort-object-command-sort-pipeline-powershell/wordcloud_hu_7046e967c73dfd11.webp)
![[PowerShell] 16. Group-Object — 그룹화](/post/powershell/group-object-command-grouping-powershell/wordcloud_hu_2e19558643be3d4e.webp)