J'exécute une longue simulation dans MATLAB dont j'ai réalisé que je devais m'arrêter et relancer. Cependant, MATLAB est vraiment dans ce calcul, et il a cessé de répondre. Comment puis-je interrompre cette course sans tuer MATLAB?
(Je me rends compte que c'est un problème avec de nombreux programmes Windows, mais c'est vraiment aigu avec MATLAB.)
Allez dans la fenêtre de commande et appuyez beaucoup sur Ctrl-C. D'après mon expérience, sur une machine monocœur, vous n'avez aucune chance, sauf si vous faites beaucoup de sortie. Sur une machine multi-cœurs ou multi-processeurs, vous finirez probablement par l'arrêter, mais cela prend du temps.
Voir aussi http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html
Ajouté : c'est une bonne pratique de (1) enregistrer un instantané de votre espace de travail avant d'exécuter quelque chose de vraiment long et (2) dans un calcul très long, écrire de temps en temps certaines variables dans un fichier, afin de pouvoir reprendre le calcul s'il a été interrompu (par une panne de courant, par exemple).
La façon dont MATLAB réagit à CTRL-C dépend plutôt de ce qu'il fait. Si c'est au milieu d'un appel BLAS ou LAPACK par exemple, il ne répondra pas jusqu'à ce que cet appel revienne. Si vous êtes dans un bloc de code où de nombreuses lignes de MATLAB sont exécutées, vous pouvez vous attendre à ce que CTRL-C soit plus réactif.
J'ai une astuce très simple pour mettre en pause (ou arrêter) une exécution non réactive. Si ma simulation exécute une longue boucle, je fais toujours ce qui suit:
for ii = 1:N
do_stuff();
clear empty_script;
empty_script;
end
Et puis créez un fichier empty_script.m
contenant les éléments suivants:
%keyboard
Chaque fois que je veux suspendre l'exécution, j'ouvre un éditeur de texte externe et décommente la ligne en disant keyboard
dans empty_script.m
. Cela me laisse en mode débogage où je peux regarder des variables, modifier des trucs ou même arrêter le programme.
Une autre stratégie pour résoudre ce problème consiste à introduire une très courte pause quelque part dans le calcul (en particulier dans une boucle FOR ou WHILE), comme dans:
for ii = 1:N
do_stuff();
pause(0.1);
end
Cela augmente les chances que votre Ctrl-C maniaque l'arrête réellement.
vous pouvez trouver le processus MATLAB dans le gestionnaire de tâches de Windows et définir la priorité comme élevée ou faible et laisser un autre programme avoir une priorité inférieure ou supérieure. D'après mon expérience, c'est un moyen efficace.