comment arrêter un script d'exécution dans Matlab [dupliquer]

Cette question a déjà une réponse ici:

  • comment annuler un programme en cours D'exécution à MATLAB? 1 réponse

j'écris un script de longue durée dans Matlab, par exemple

tic;
d = rand(5000);
[a,b,c] = svd(d);
toc;

il semble courir pour toujours. J'appuie sur F5 dans la fenêtre de l'éditeur. Donc je ne peux pas appuyer sur C-Break pour arrêter dans la console Matlab.

je viens de vous voulez savoir comment arrêter le script. Je suis responsable des tâches pour tuer Matlab, ce qui est vraiment stupide.

Merci.

16
demandé sur Parthian Shot 2011-01-25 11:01:39

8 réponses

Matlab help dit ceci- Pour les M-files qui tournent longtemps, ou qui appellent des built-ins ou des MEX-files qui tournent longtemps, Ctrl+C n'arrête pas toujours efficacement l'exécution. Typiquement, cela se produit sur les plates-formes Microsoft Windows plutôt que sur les plates-formes UNIX[1]. Si vous rencontrez ce problème, vous pouvez aider L'exécution de casse de MATLAB en incluant une fonction drawnow, pause, ou getframe dans votre m-file, par exemple, dans une grande boucle. Notez que Ctrl+C pourrait être moins réactif si vous avez commencé MATLAB avec l'-nodesktop option.

donc je ne pense pas qu'il y ait d'option. Cela se produit avec de nombreuses fonctions matlab qui sont complexes. Soit nous devons attendre ou ne les utilisez pas!.

8
répondu S Krishna Kumar 2011-01-25 11:51:05

si ctrl+c ne répond pas tout de suite parce que votre script est trop long/complexe, retenez-le.

la commande break ne s'exécute pas lorsque matlab exécute certains de ses scripts plus profonds, et soit il n'enregistre pas de séquence ctrl dans le buffer, soit il efface le buffer juste avant ou juste après avoir terminé ces morceaux de code. Dans les deux cas, lorsque matlab retourne exécuter plus de votre script, il reconnaîtra que vous détenez ctrl+c et terminera.

pour plus longtemps en exécutant des programmes, j'essaie habituellement de trouver un bon endroit pour fournir une mise à jour de statut et j'accompagne toujours cela avec une certaine mesure de temps en utilisant tic et toc. Selon ce que je fais, je pourrais utiliser le temps d'exécution, le temps de segment, une sorte de moyenne, etc...

pour les programmes de très longue durée, j'ai trouvé cela exceptionnellement utile http://www.mathworks.com/matlabcentral/fileexchange/16649-send-text-message-to-cell-phone/content/send_text_message.m

mais il on dirait qu'ils ont certaines nouvelles fonctions pour cela aussi.

5
répondu Mach 2013-07-01 17:27:04

MATLAB ne répond pas à Ctrl-C lors de l'exécution d'une fonction implémentée par mex comme svd. Aussi quand MATLAB alloue un gros morceau de mémoire il ne répond pas. Une bonne pratique est de toujours exécuter vos fonctions pour une petite quantité de données, et lorsque tous les passages de tests exécutez l'échelle réelle. Quand le temps est un problème, vous voudriez analyser combien de temps chaque segment de code court aussi bien que leur complexité de temps approximatif.

4
répondu Memming 2012-01-07 00:05:14

envisager plusieurs séances de matlab. Gardez la fenêtre principale de la session (la jolie avec toutes les couleurs, le gestionnaire de fichiers, l'historique des commandes, l'espace de travail, l'éditeur, etc.) pour l'exécution des choses que vous savez sera résilié.

choses que vous expérimentez, dites que vous jouez avec Ode suite et vous obtenez beaucoup d'Avertissements: matrix singulier, parce que vous avez modifié un paramètre et n'avez pas prédit ce qui se passerait, exécutez dans une session séparée:

dos('matlab -automation -r &')

Vous pouvez tuer que, sans avoir à redémarrer l'ensemble de Matlab.

2
répondu Rem 2012-06-30 04:51:43

une solution que j'ai adoptée--pour une utilisation avec du code java, mais le concept est le même avec mexFunctions, juste messier--est de retourner une valeur Futureainsi une boucle pendant que la valeur Futureest.fini (ou ce que renvoie la valeur true. Le code actuel s'exécute dans un autre thread/process. J'enroule un essai, vois autour de ça et une valeur future.cancel() dans le bloc catch fonctionne pour moi.

Dans le cas de mex fonctions, vous devrez retourner somesort de pointeur (un int) qui pointe vers une struct/objet possède toutes les données dont vous avez besoin (gestionnaire de thread natif, bool pour complete etc). Dans le cas d'un bâti en mexFunction, votre mexFunction sera très probablement besoin d'appeler qui mexFunction dans le thread séparé. Les fonctions Mex ne sont finalement que des objets DLLs/partagés.

Pseudo

FV = mexLongProcessInAnotherThread();
try
  while ~mexIsDone(FV);
    java.lang.Thread.sleep(100); %pause has a memory leak
    drawnow; %allow stdout/err from mex to display in command window
  end
catch
  mexCancel(FV);
end
1
répondu KitsuneYMG 2012-11-14 19:10:41

puisque vous avez mentionné le Gestionnaire des tâches, je suppose que vous utilisez Windows. En supposant que vous exécutez votre script dans l'éditeur, si vous n'êtes pas opposé à quitter l'éditeur en même temps que vous quittez le programme en cours d'exécution, le raccourci clavier pour terminer un processus est:

Alt+ F4

(j'entends par là que vous appuyez simultanément sur les touches 'Alt' et 'F4' de votre clavier.)

alternativement, comme indiqué dans d'autres les réponses,

Ctrl+ C

devrait aussi fonctionner, mais ne quittera pas l'éditeur.

1
répondu Parthian Shot 2014-05-27 17:38:10

si vous utilisez votre matlab sous linux, vous pouvez résilier le matlab par la commande linux consule. vous devez d'abord trouver le numéro PID de matlab par ce code:

haut de page

ensuite, vous pouvez utiliser ce code pour tuer matlab: tuer

exemple: tuer 58056

0
répondu mehdi SH 2013-06-09 11:47:37

Pour les ajouter sur:

vous pouvez insérer une vérification de l'heure dans une boucle avec blocage intensif ou possible, c'est-à-dire.

:
section_toc_conditionalBreakOff;
:

dans cette section

if (toc > timeRequiredToBreakOff)     % time conditional break off
      return;
      % other options may be:                         
      % 1. display intermediate values with pause;
      % 2. exit;                           % in some cases, extreme : kill/ quit matlab
end
-3
répondu Ursa Major 2011-10-25 08:01:35