Dado um PID no Windows - como encontro a instrução de linha de comando que o executou?

24

Em um banco de dados, posso obter uma lista de todos os processos atualmente em execução e o comando sql que os expulsou.

Eu gostaria de fazer algo semelhante em uma caixa de janelas.

Eu posso obter a lista de processos, mas não a linha de comando que os expulsou.

Minha pergunta é: Dado um PID no Windows - como eu encontro a instrução de linha de comando que a executou?

Suposições:

  • Windows 7 e servidores equivalentes
por Hawkeye 03.06.2015 / 22:55

3 respostas

33

Powershell e WMI.

Get-WmiObject Win32_Process | Select ProcessId,CommandLine

Ou

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

Observe que você precisa ter permissões para acessar essas informações sobre um processo. Então você pode ter que executar o comando como admin se o processo que você deseja conhecer estiver sendo executado em um contexto privilegiado.

    
por 03.06.2015 / 23:20
20

Você pode usar o subsistema WMI, usando WMIC.EXE para obter essas informações. Assumindo um PID de 600:

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

Você também pode pesquisar por nome ou outra característica do processo. Use este comando para listar todos os atributos:

wmic.exe path Win32_Process get  /format:list
    
por 03.06.2015 / 23:39
14

As outras respostas são certamente boas opções que irão atendê-lo bem em um sistema automatizado por causa de sua natureza de linha de comando (e eu vejo na tag que é isso que você queria). Claro, algumas pessoas podem querer explorar esse tipo de informação com uma GUI, então aqui está uma alternativa nesse sentido.

O Process Explorer é uma ferramenta da Sysinternals mantida pela Microsoft. Ele pode exibir a linha de comando do processo no diálogo de propriedades do processo, bem como o pai que o iniciou, embora o nome desse processo não esteja mais disponível. Aqui está o diálogo de propriedades do processo:

Sevocêquiserumatrilhadeauditoriamaisdetalhadadequandoumprocessofoiiniciadoesobquaiscondições,vocêpoderecorreraoutraferramentadaSysinternalschamadaProcessMonitor.Aquivocêpodefiltrarporeventos"Processo iniciado", aprender sobre o ambiente em que o processo foi iniciado e ver quais outros eventos estavam ocorrendo nessa época. É um programa bastante poderoso. Aqui está o diálogo de propriedades do evento:

    
por 04.06.2015 / 07:26