Por que às vezes o Windows não pode matar um processo?

28

Neste momento, estou tentando executar / depurar meu aplicativo no Visual Studio, mas não é possível criá-lo porque a última instância do app.vshost.exe ainda está em execução. Então, usando o Gerenciador de Tarefas, estou tentando matá-lo, mas ele permanece lá sem sinal de atividade.

Além desse caso específico (talvez um erro do Visual Studio), estou muito curioso sobre as razões técnicas pelas quais às vezes o Windows não pode matar um processo?

Pode, um desenvolvedor relacionado ao sistema operacional, por favor, tentar explicar?

(E, por favor, não comece uma batalha Unix / Linux / Mac contra o Windows.)

    
por Néstor Sánchez A. 20.03.2010 / 02:18

9 respostas

19

A causa geralmente é de um driver que não responde, e que tem solicitações inacabadas de E / S em andamento.

Veja a entrada no blog de Mark Russinovich Processos não-mortais ( arquivo )

    
por 20.03.2010 / 03:17
14

Um possível motivo: você não pode matar uma tarefa anexada a um depurador.

A única maneira de parar a tarefa é a partir do próprio depurador.

    
por 20.03.2010 / 11:12
3

Uma razão seria que você não tem permissão para matá-lo. Por exemplo. se o processo estiver sendo executado como administrador e você for um usuário normal.

    
por 20.03.2010 / 02:33
3

Abra a página Propriedades do projeto, vá para a aba Debug e marque a opção "Ativar depuração de código não gerenciado". Ou desmarque a opção de usar o processo de host.

    
por 20.08.2011 / 18:48
2

Se o último app.vshost.exe ainda estiver em execução, basta conectar-se a esse processo com o depurador.

Deve ser encontrado no menu em Debug-> AttachToProcess, em seguida, escolha o processo de suspensão e conecte-se a ele.

    
por 20.03.2010 / 13:40
2

Minha única experiência de desenvolvimento no nível do sistema operacional foi na faculdade, mas suspeito que o que está acontecendo é isso (ou algo similar):

Ocorreu um erro durante a execução da última instância que o depurador tentou manipular, mas algum outro problema causou a falha (talvez uma declaração de depuração tenha sido encontrada, mas antes que você pudesse clicar na caixa de diálogo Abortar / Reconfigurar / Ignorar, outra break foi disparado, talvez devido a um ponteiro nulo). O resultado, depois que você parou a depuração, foi que o depurador ainda estava aguardando sua resposta à primeira declaração de depuração, portanto, não permitiria que o processo fosse finalizado. Mas então o depurador terminou quando você parou de depurar (ou fez isso?), Transformando o processo em um zumbi, ou sua árvore em zumbis. Quando você tentou matar o processo zumbi, um erro semelhante a isso aconteceu, mas o gerenciador de tarefas não informou sobre isso:

C:\Windows\system32>taskkill /pid 9564 /f /t
ERROR: The process with PID 9564 (child process of PID 22520) could not be
terminated.
Reason: There is no running instance of the task.

Se você decidir tentar a mesma coisa no pai (no meu caso, o pai era o processo de depuração, msvsmon.exe), ele falha da mesma maneira:

C:\Windows\system32>taskkill /pid 22520 /f /t
ERROR: The process with PID 9564 (child process of PID 22520) could not be
terminated.
Reason: There is no running instance of the task.
ERROR: The process with PID 22520 (child process of PID 13964) could not be
terminated.
Reason: There is no running instance of the task.

O pai foi iniciado pelo IDE, mas o IDE cortou o cordão umbilical, então agora você tem dois processos zumbis. Você não pode anexar um depurador ao processo que estava depurando, porque já existe um depurador (zumbi) anexado e você não pode anexar um depurador ao depurador (zumbi) porque, como o Visual Studio informará quando você tentar :

Unable to attach to the process. An operation is not legal in the current state.

Os zumbis ainda estão na tabela de processos suficientemente bem para evitar que você execute outra instância através do depurador, mas você provavelmente poderia iniciar outra instância fora do IDE.

Isso aborda a questão mais específica de ter o VS criando um processo zumbi. Mas, os processos zumbis geralmente não morrem. Bem, muitas vezes no Windows, às vezes no Linux, não até você atirar neles com uma espingarda. Ou isso foi um desligamento? Mas cuidado com a aplicação acidental de atualizações pendentes do Windows.

Eu fiquei empolgado com algumas das respostas anteriores que sugeriam anexar ao depurador, mas o resultado acima foi o que obtive. Então, estou enviando minha resposta e reinicializando para limpar a tabela de processos.

    
por 13.10.2016 / 23:58
1

Talvez um exame de algumas das ferramentas citadas aqui possa levar a respostas?

link

(No momento, descobri que o pskill era a única das várias ferramentas que poderiam matar um processo executado na sessão do Windows 7 de um usuário, da sessão de outro usuário (ou credenciais, suponho).

    
por 18.07.2013 / 06:45
-1

Você pode!

Usando ProcessHacker (clique com o botão direito no processo) - > Terminator.

    
por 26.06.2012 / 14:14
-1

Se você estiver usando o VS para depurar o processo e matá-lo com o gerenciador de tarefas.Então, o VS não pode lidar com isso bem.

Então, o VS ainda está depurando o processo de destino, mas você não pode simplesmente pressionar o processo de parada no VS.Just, saia do seu VS e verá o processo sair.

    
por 20.06.2018 / 04:32