
O gerenciador de tarefas do Windows possui uma coluna chamadaLinha de comandoque mostra o comando que iniciou a tarefa determinada, com todas as opções e parâmetros, por exemplo:
test.exe -V -A 127.0.0.1 -P 6062
Agora tenho que identificar uma determinada tarefa que está escutando em uma determinada porta e/ou foi chamada com uma determinada combinação de switches. Meu objetivo é fechar a tarefa selecionada, mas não outras; portanto, se houver várias test.exe
tarefas em execução, não posso simplesmente fechar todas as tarefas retornadas por:
tasklist /fo csv /nh /fi "imagename eq test.exe"
Infelizmente parece que nem tasklist
nem pslist
(aqui) é capaz de retornar oLinha de comandocampo. Como posso superar esse problema?
Responder1
Que tal este:
wmic process where caption="test.exe" get commandline
E se você fizer isso, você também terá o ProcessId para matar:
wmic process where caption="test.exe" get commandline,processid
wmic
também tem uma opção para saída para csv. Então:
wmic /output:c:\temp\proc.csv process where caption="test.exe" get commandline,processid /format:csv
Nota: Se você receber um erro com o último ( Invalid XSL format (or) file name
), será necessário copiar csv.xml
de %WINDIR%\System32\wbem\en-US
para %WINDIR%\System32\wbem
. Você pode ler sobre esse bugaqui.
Você também pode usar o PowerShell:
Get-WmiObject win32_process -Filter "name like '%test.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize`
Responder2
Power Shell 7:
get-process test | % commandline
Responder3
No Windows 11, pelo menos, a resposta principal acima não funcionou, pois não há coluna “legenda” na wmic process
saída, portanto não foi encontrado nenhum resultado. (E sim, sei que o wmic está obsoleto no Windows 11. Ele ainda funciona.)
Em vez disso, existem outras colunas que você pode usar para essa cláusula WHERE e estão disponíveis com wmic process list /?
. Entre eles estão, é claro name
(para o nome do processo) - e aquele processid
(para o pid) mencionado acima, então funcionou para mim:
wmic process where name="test.exe" get commandline,processid
Mais uma coisa:Descobri que precisava executar um prompt de comando elevado (como administrador) para ver a linha de comando. Caso contrário, a saída mostrou a linha de comando vazia:
CommandLine ProcessId
10496