Rastrear qual programa inicia um certo processo?

7

Existe um certo processo que me incomoda, que está sendo continuamente lançado cerca de um minuto depois de ser eliminado via prompt de comando ou gerenciador de tarefas.

Atualmente eu vou com o método de ter um arquivo em lote para fazer um loop a cada 15 segundos, matando-o se estiver lá. No entanto, prefiro ser capaz de parar o que está sendo lançado.

Existe algum método para o Windows 7, para acompanhar como um processo está sendo lançado?

    
por user398246 12.12.2014 / 07:17

3 respostas

9

Existe uma coisa chamada PPID (Parent Process ID), mas é relativamente "complicado" encontrar no Windows porque não é uma coluna mostrada no Gerenciador de Tarefas, e eu nem estou vendo isso para colunas no Process Explorer.

Dois métodos para fazer isso

Method 1 - WMIC
Method 2 - Process Monitor

Ambos são métodos bem rápidos

Método 1 - WMIC

Vou usar uma resposta de como encontrar o PPID usando o WMIC daqui link

E isso torna o resto disso bastante simples

C:\blah>wmic process get processid,parentprocessid
ParentProcessId  ProcessId
0                0
0                4
4                320
392              572
320              656
648              664
392              688
688              740
688              756
688              764
...              ...

O resto é bastante óbvio.

Então, vamos supor que você queira encontrar quem lançou o calc.exe

e calc.exe você vê do gerenciador de tarefas, é PID 7384

C:\blah>wmic process get processid,parentprocessid | find "7384"
10896            7384

PPID             PID


C:\crp>

O WMIC mostra as associações entre o PID e o PPID. Então procure 10896 no Gerenciador de Tarefas, (10896 é o PPID listado para o PID do calc.exe de 7384), e no gerenciador de tarefas eu vejo que o processo com PID de 10896 é o cmd.exe que é o processo que usei para iniciar o calc. exe E, de fato, cmd.exe é o processo pai que gerou o calc.exe

Método 2 - Monitor de processo

Você pode fazer isso no monitor de processo sysinternals.

clique em filter..filter na barra de menu e adicione um filtro filtrando o nome ou caminho ou PID do processo, por exemplo nome do processo calc.exe ou um filtro para o caminho e digite c: \ windows \ system32 \ calc.exe

Por acaso usei o nome do processo

FaçaoOK..earquivo..captureseaindanãoestivercapturando.

Cliqueduasvezesnoprocessocertoparaquenestecasocarregueaimagemcalc.exeeumacaixadediálogodepropriedadessejaexibida,cliquenaguiacorreta,'process'evocêveráoPIDeoPPID(iddoprocessopai).

E, claro, quando você conhece o PPID como você faria agora, você pode consultá-lo no gerenciador de tarefas para saber qual processo o gerou

    
por 12.12.2014 / 09:35
3

Se este fosse um processo que estava sendo executado em segundo plano, provavelmente usaria o Process Explorer ou wmic abordagens de processo descritas por Barlop ou Robert Koritnik . Se o processo for transitório e iniciar / sair muito rapidamente, não dando tempo suficiente para executar os cliques e pressionamentos de teclas necessários, eu usaria o Process Monitor, conforme descrito por nixda.

Estou um pouco atrasado para esta festa, mas para completar:

Outra alternativa para isso (se por qualquer motivo, você não quiser usar o Process Monitor), é usar o rastreamento de processo integrado. Isso pode ser ativado indo para:

Painel de controle - > Ferramentas Administrativas - > Política de segurança local - > Políticas locais - > Política de Auditoria Se as Ferramentas Administrativas não estiverem presentes em seu Painel de Controle, outra maneira de abrir a Política de Segurança Local é clicando no botão Iniciar e digitando secpol.msc .

Você deve ver várias opções de auditoria, incluindo o acompanhamento do processo de auditoria . Ative isto para a categoria de Sucesso .

AgoranoVisualizadordeEventos->RegistrosdoWindows->Segurança,vocêveráumeventopara"criação de processo" (que é a identificação de evento 4688), o nome / caminho do processo que está sendo criado e um campo chamado ID do processo do criador . Contém a representação hexagonal do PID do processo que criou esse processo (você pode convertê-lo facilmente usando calc.exe na visualização Programador ).

Você pode procurar por esse PID (o PID daquele 'processo criador', ou seja, o PPID) no Gerenciador de Tarefas, ou a saída de algo como tasklist / svc .
Se o processo não estiver mais lá, você pode procurar outros eventos com o ID 4688 para esse outro PID, desde quando foi criado.

    
por 12.12.2014 / 11:08
-1

Poucas sugestões possíveis para tentar (em ordem aleatória), algumas das quais podem não dar resultados viáveis ou já experimentadas. Eu não tentei isso sozinho, então estou apenas fornecendo idéias que os outros podem perder. Brainstorming ... Lembre-se de que a maioria das minhas sugestões visam a mitigação de problemas, em vez de resolvê-los em sua causa raiz. são as chamadas medidas desesperadas ou plano Z .

1. Informações da linha de comando no Gerenciador de Tarefas

Você já verificou a coluna Command no Gerenciador de Tarefas se ela fornece essa informação? Eu suponho que você já tentou isso.

2. Informações do processo no Process Explorer

Se o Comando estiver vazio, eu tentarei o Process Explorer da SysInternals e verei se obtenho mais informações sobre esse processo específico.

3. Suspendendo um processo

Se você não conseguir encontrar a raiz do seu problema, tente suspender o processo para que ele continue, mas não faça nada. Você pode fazer isso usando Monitor de Recursos

ouProcessExplorerdoSysInternals

Algum processo desconhecido que inicia provavelmente verifica processos (por nome) e, se perceber que não está lá, ele inicia. Se você fizer uma pausa, ele existirá para que esse processo de inicialização não gere uma nova instância.

Isso pode falhar se o processo de inicialização usar outros meios de detecção de processo (comunicação entre processos), mas esse tipo de detecção de processo é muito mais difícil de desenvolver, portanto, opções mais fáceis ganham.

4. Programa personalizado

Podemos estar lidando com dois processos aqui. Primeiro um que verifica a existência do segundo processo e o inicia (que você está matando). Quando o segundo está rodando, você pode ver a linha de comando dele, mas sabendo que isso não ajuda você nem mesmo a iniciando e você pode preferir estar após o primeiro processo que realmente inicia tudo. Sorte difícil.

Mas, como você parece ter experiência com computadores, você pode substituir o segundo processo (se a linha de comando for conhecida) com seu próprio executável que não faz nada e fica lá. Precisa ter o mesmo nome de processo. Também poderia começar e terminar imediatamente por si mesmo.

Se você for realmente bom no desenvolvimento de sistemas operacionais de baixo nível, poderá escrever o segundo processo de forma a verificar quem o iniciou, se possível. Não tenho certeza, mas a API do Windows deve fornecer essas informações. Isso então levaria você à raiz do problema.

5. Agendador de Tarefas

Pode ser que o seu processo não seja gerado por outros processos, mas sim por um trabalho de tarefa agendada definido em execução a cada minuto. Não tenho certeza se você já verificou isso, mas pode ser o caso.

6. Limpeza de infecção

Considerada infecção viral? Tente detectá-lo e limpá-lo.

    
por 12.12.2014 / 09:03