2012-04-22 14:36:24 +0000 2012-04-22 14:36:24 +0000
86
86

Como posso encontrar argumentos de linha de comando de um programa em execução?

Estou à procura de uma ferramenta ou método para descobrir que parâmetros de linha de comando foram passados para um programa, por exemplo quando foi executado por outro programa (cenário de lançamento-aplicação).

Respostas (7)

91
91
91
2012-12-15 17:29:14 +0000

Também o pode fazer sem o Process Explorer, utilizando o serviço WMI do Windows. Execute o seguinte a partir do prompt de comando:

WMIC path win32_process get Caption,Processid,Commandline

Se quiser descarregar a saída para um ficheiro (torna-o um pouco mais fácil de ler), utilize o interruptor /OUTPUT:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
73
73
73
2012-04-22 14:39:21 +0000

Pode fazê-lo usando Process Explorer .

Basta passar com o rato sobre um processo para ver os argumentos de linha de comando utilizados para o iniciar:

Em alternativa, pode abrir as propriedades do processo e inspeccionar a linha de comando ali mesmo:

41
41
41
2015-10-03 07:28:36 +0000

Também se pode conseguir isso utilizando Task Manager*.

Gestor de tarefas abertas (por CTRL-SHIFT-ESC, CTRL-ALT-DELETE ou qualquer outro método).

Para Windows 7 (e provavelmente Windows XP):

  • Ir para o separador “Processos”. No menu “Ver”, seleccionar “Seleccionar Colunas…”. & - Marque a caixa de verificação de “Linha de Comando” e clique OK. (Pode ter de percorrer para baixo para o encontrar)

Para Windows 8:

  • Ir para o separador “Details” (Detalhes). Clique com o botão direito do rato em qualquer uma das colunas (ex. Nomes, PID, etc.) e seleccione “Seleccionar colunas”. & - Marque a caixa de verificação de “Linha de Comando” e clique em OK. (Poderá ter de percorrer para baixo para o encontrar)

Uma coluna de linhas de comando de será adicionada às colunas actualmente exibidas.

6
6
6
2014-08-07 05:46:54 +0000

PowerShell para o salvamento.

Find:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'}

E matar como bónus:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }

Pode executá-lo directamente a partir do PowerShell ou a partir de um ps1 se tiver o seu sistema configurado. Eu detalho a configuração sem restrições do script em mato zombies com powerhell bem como outros truques de powerhell…

5
5
5
2018-01-27 10:39:55 +0000

As respostas anteriores são óptimas caso o processo já esteja em curso e não termine tão cedo. No entanto, se precisar (como eu fiz) de fazer isto talvez com processos iniciados várias vezes e/ou terminar rapidamente, ou talvez registar ocorrências num período de tempo mais longo, há uma forma de o fazer usando Process Monitor .

Basicamente regista vários eventos no sistema, neste caso podemos apenas filtrar o evento “Process Start” e o nome do processo que queremos monitorizar, como se mostra abaixo:

Depois basta manter o monitor do processo a funcionar e fazer o que quer que se faça para que o processo que se quer registar seja executado. Pode ver na coluna “Detalhe” ou na coluna “Linha de Comando” (depende de como os configura) os argumentos da linha de comando. Por exemplo:

Claro que desta forma pode extrair muito mais informação relacionada, tal como o que é o directório de trabalho, que variáveis de ambiente foram transmitidas no processo, etc… Também é fácil de exportar os resultados para um ficheiro.

1
1
1
2014-04-07 15:07:04 +0000

Ao utilizar CygWin , se eu iniciar um processo Python*, este é um exemplo de linha de comando:

c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py

Mas Process Explorer só vê o exe principal:

C:\>tasklist | find "python" /i
python2.7.exe 5740 Console 1 15.312 KB

(note o “caminho”: mensagem de processo de abertura de erro]“ (ver EDIT-1))). Os mesmos resultados para tasklist:

Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

Então, o único truque que conheço até agora, é encontrá-lo através de CygWin Bash shell* pgrep:

É útil saber isto, desde que o CygWin coabite sem problemas no Windows, e pode utilizá-lo para executar muitos programas POSIX e Python.

EDIT: No Windows não parece precisar de privilégios de administrador para a lista de tarefas. No CygWin vai precisar deles para poder ver o processo de um administrador (o que me parece mais lógico: a linha de comando completa poderia ter alguns parâmetros como passwords dentro), por isso temos de correr o CygWin Bash em elevado Modo administrador*.

EDIT-1: Este problema não acontecerá se correr o Process Explorer como administrador. Obrigado por apontar, @Pacerier.

-3
-3
-3
2012-11-02 04:46:45 +0000

ir para run ou ir para start e pesquisar:

tasklist -m

tasklist -svc