Em um banco de dados, posso obter uma lista de todos os processos em execução no momento e o comando sql que os iniciou.
Eu gostaria de fazer uma coisa semelhante em uma caixa de janelas.
Posso obter a lista de processos, mas não a linha de comando que os iniciou.
Minha pergunta é: Dado um PID no Windows - como encontro a instrução de linha de comando que o executou?
Suposições:
- Windows 7 e servidores equivalentes
Powershell e WMI.
Ou
Observe que você precisa ter permissões para acessar essas informações sobre um processo. Portanto, pode ser necessário executar o comando como administrador se o processo que você deseja conhecer estiver sendo executado em um contexto privilegiado.
Você pode usar o subsistema WMI, usando WMIC.EXE para obter essas informações. Assumindo um PID de 600:
Você também pode pesquisar por nome ou outra característica do processo. Use este comando para listar todos os atributos:
As outras respostas certamente são boas opções que irão atendê-lo bem em um sistema automatizado por causa de sua natureza de linha de comando (e vejo pela 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 na caixa de diálogo de propriedades do processo, bem como o pai que o iniciou, embora o nome desse processo possa não estar mais disponível. Aqui está a caixa de diálogo de propriedades do processo:
Se você deseja uma trilha de auditoria mais detalhada de quando um processo foi iniciado e em quais condições, pode recorrer a outra ferramenta da Sysinternals chamada Process Monitor. Aqui você pode filtrar eventos de "Processo iniciado", aprender sobre o ambiente em que o processo foi iniciado e ver quais outros eventos estavam ocorrendo naquele momento. É um programa bastante poderoso. Aqui está a caixa de diálogo de propriedades do evento:
Para complementar a resposta útil do PowerShell de Ryan Ries com uma alternativa mais curta por meio do
-Filter
parâmetro que também usaGet-CimInstance
em vez do cmdlet obsoleto-desde-v3Get-WmiObject
.O
-Filter
parâmetro basicamente permite que você passe aWHERE
cláusula de uma instrução WQL em vez de passar uma instrução de consulta completa via-Query
.