Windows에 PID가 주어지면 명령 행 명령을 어떻게 찾습니까?


26

데이터베이스에서 현재 실행중인 모든 프로세스의 목록과 프로세스를 시작한 sql 명령을 얻을 수 있습니다.

창문 상자에서 비슷한 일을하고 싶습니다.

프로세스 목록을 얻을 수는 있지만 프로세스를 시작한 명령 줄은 아닙니다.

내 질문은 : Windows에서 PID주어 졌을 때-PID를 실행 한 명령 줄 명령을 어떻게 찾습니까?

가정 :

  • Windows 7 및 동등한 서버

답변:


35

Powershell 및 WMI

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

또는

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"

프로세스에 대한이 정보에 액세스하려면 권한이 있어야합니다. 따라서 알고 자하는 프로세스가 권한있는 컨텍스트에서 실행중인 경우 명령을 admin으로 실행해야 할 수도 있습니다.


경로가 잘리는 것을 발견했습니다. 그 주위에 방법이 있습니까?
Hawkeye

1
@Hawkeye | FL명령 끝에 추가해보십시오 . 그것은 나를 위해 모든 명령 줄을 확장합니다. 또한 함께 플레이 할 수 있습니다| Select -ExpandProperty CommandLine
라이언 RIES는에게

흥미롭게도 기본 Get-Process cmdlet에서이 정보를 얻을 수 없습니다.
Davidw

3
Get-process는 해당 속성이없는 system.diagnostics.process 클래스를 사용합니다. get-process에 대한 도움말에는 wmi를 사용하여 프로세스 객체를 가져 오는 예도 있습니다.
Jim B

2
다른 프로세스의 명령 행을 공식적으로 지원하는 방법이 없다는 점은 주목할 가치가 있습니다. 명령 줄 될 수있는 문자열을 얻는 방법이 있지만 운영 체제에서 보장하지는 않으며 결과는 "닭 치킨 치킨"일 수 있습니다.
Nick

21

WMIC.EXE를 사용하여 WMI 하위 시스템을 사용하여이 정보를 얻을 수 있습니다. PID가 600이라고 가정하면 :

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list

프로세스의 이름 또는 기타 특성을 검색 할 수도 있습니다. 모든 속성을 나열하려면이 명령을 사용하십시오.

wmic.exe path Win32_Process get  /format:list

1
편리합니다. process대신 별명을 사용 하여 약간 줄이십시오 path Win32_Process. 예 : wmic.exe process get
mklement

15

다른 답변은 명령 줄 특성으로 인해 자동화 된 시스템에서 잘 작동하는 훌륭한 옵션입니다 (그리고 태그에서 원하는 것을 볼 수 있습니다). 물론 어떤 사람들은 GUI를 사용하여 이런 종류의 정보를 탐색하고 싶을 수도 있습니다.

프로세스 탐색기는 Microsoft에서 유지 관리하는 Sysinternals 도구입니다. 프로세스의 이름을 더 이상 사용할 수는 없지만 프로세스의 속성 대화 상자 및 프로세스를 시작한 상위 프로세스에 프로세스의 명령 행을 표시 할 수 있습니다. 프로세스 속성 대화 상자는 다음과 같습니다.

프로세스 속성 대화 상자

프로세스 시작시기 및 조건에 대한보다 자세한 감사 추적을 원하는 경우 프로세스 모니터라는 다른 Sysinternals 도구를 사용할 수 있습니다. 여기에서 "프로세스 시작"이벤트를 필터링하고 프로세스가 시작된 환경에 대해 배우고 그 당시에 발생한 다른 이벤트를 확인할 수 있습니다. 꽤 강력한 프로그램입니다. 이벤트 속성 대화 상자는 다음과 같습니다.

이벤트 속성 대화 상자


10
또는 작업 관리자의 열을 변경하여 PID 및 "명령 줄"을 표시하십시오. 그리고 끝났습니다.
Ismael Miguel

@IsmaelMiguel 작업 관리자의 명령 줄 열은 실제로 긴 인수 문자열을 자릅니다. 프로세스 탐색기가
JG를

@ JGinSD 잘린 인수를 본 적이 없습니다.
Ismael Miguel

1
@IsmaelMiguel 명령 줄 열의 제한은 약 200자인 것 같습니다.
JG SD

1
작업 관리자의 실제 제한은 259 자입니다. (Windows 10에서 확인). 그러나 작업 관리자에는 한 가지 장점이 있습니다. 관리자 권한이 아닌 권한 상승없이 다른 사용자의 프로세스 / 높은 프로세스의 명령 줄이 표시됩니다. Process Explorer 및 Process Monitor는 259 자로 제한되지 않지만 v16.22부터는 해당 열 위에 마우스를 놓으면 열이 추가 된 경우 너무 긴 명령 행으로 중단 될 수 있습니다 Command Line.
mklement

1

보완하기 위해 라이언 RIES는 '도움이 PowerShell을 대답을바이어 짧은 다른 -Filter매개 변수사용하는Get-CimInstance 대신에 사용되지-이후-V3 Get-WmiObjectcmdlet을 .

# Target a process by its PID (process ID) and report its command line, 
# using the PowerShell session's own PID as an example ($PID).
(Get-CimInstance Win32_Process -Filter "ProcessId=$PID").CommandLine

# Alternatively, target process(es) by name (may return multiple processes), 
# using Notepad.exe as an example.
# Select-Object is used to report both the PID and the command line.
Get-CimInstance Win32_Process -Filter "Name='Notepad.exe'" |
  Select-Object ProcessId, CommandLine

-Filter매개 변수를 사용하면을 통해 전체 쿼리 문을 전달하는 대신 WQL 문의 WHERE절 을 전달할 수 있습니다 .-Query

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.