Existe.
Os programas podem ser escritos usando uma técnica chamada exceções. Veja uma descrição simplificada de como eles funcionam:
- A ideia é que você possa contar uma parte de um programa, quando se deparar com um erro ou algo que não possa ser resolvido, para lançar uma exceção .
- Outra parte do programa terá sido configurada anteriormente para capturar exceções - este é o manipulador de exceção .
- Se o erro for algo que até mesmo o manipulador de exceções não pode lidar com isso, ele pode fazer uma das duas coisas:
- Jogue-o em outro manipulador de exceção que possa manipulá-lo.
- Basta jogar "lá fora" para qualquer coisa - se não houver nenhum manipulador de exceção disposto / disponível para recebê-lo, o sistema operacional o captura e você vê o diálogo de falha.
Assim, quando um programa falha, ele literalmente desistiu e terminou a execução.
Isso é diferente quando um programa pára de responder. Programas do Windows mantêm a comunicação com o sistema operacional usando um loop de mensagem . Se o programa ficar travado, aguardando E / S ou um loop infinito, ele deixará de receber mensagens do loop e o Windows informará o programa não está respondendo. Uma coisa que pode fazer com que os programas esperem inesperadamente na E / S é quando você está com pouca memória RAM e o SO precisa usar o arquivo de paginação para manipular as solicitações de memória. Outro pode ser se o seu disco falhar de repente e o programador nunca considerar a possibilidade de que gravar em um arquivo pode ser interrompido com algo parecido - ou o programador fez algo como "se essa operação falhar, tente novamente para sempre".
Então, neste caso, o programa ainda está em execução, não está mais falando com o Windows.