Il y a déjà un similar question sur SO, cependant, la solution ne fonctionne que si la boucle ne génère aucune sortie. Si à la place, j'essaie de lancer while(true) System.out.print(1);
et de taper Ctrl + C ensuite, ce qui se passe est que le terminal se bloque et il semble qu'il n'y ait aucun moyen de le tuer. Est-ce que tout peut être fait en plus de fermer et de rouvrir le terminal?Tuer une boucle infinie gèle le terminal
Répondre
Vous ne devriez pas avoir une boucle comme ça. Vous devriez publierai un peu de temps à la CPU en dormant le fil actif pendant un certain temps avec
while (true) {
// Do your processing stuff here.
// This line ensures that the active thread releases some time
// to the CPU, allowing closure of the application via Ctrl-C.
Thread.sleep(numberOfMillisecondsToSleepFor);
}
Vous pouvez tuer le processus, avec votre code existant, d'un autre terminal kill, mais vous devriez vraiment empêchez que CPU scénario de verrouillage en codant la boucle correctement pour répondre à cela.
Cela ne répond pas vraiment à la question. Avoir une boucle vide ne provoque pas la même chose. – Maroun
Une boucle infinie 'while (true)' est mauvaise et ne devrait pas être faite à moins qu'un peu de temps soit libéré au CPU. Sa boucle ci-dessus ne fait pas ça. Et c'est pourquoi il ne peut pas tuer le processus facilement. Le problème est son code de boucle, pas les symptômes suivants de celui-ci. – ManoDestra
Alors, quelle est la différence entre une boucle infinie vide et une boucle infinie avec une instruction d'impression (en termes d'utilisation du processeur)? – Maroun
Bonne question. La chose étrange est que lorsque vous essayez d'imprimer "Bonjour", parfois en utilisant CTRL + C tue la boucle, parfois ce n'est pas le cas. – Maroun
dans un autre terminal, vous pouvez tuer le processus. – Taylor
Depuis la question a vieilli maintenant. Pourtant, essayer la même chose sur la dernière version 9.0.1 jshell 'Ctrl + C' fonctionne pour moi. – nullpointer