2010-03-08 5 views
34

Sto eseguendo una simulazione lunga in MATLAB che ho realizzato che ho bisogno di fermarsi e rieseguire. Tuttavia, MATLAB è davvero in questo calcolo, e ha smesso di rispondere. Come posso interrompere questa corsa senza uccidere MATLAB?Come posso interrompere MATLAB quando diventa veramente occupato?

(mi rendo conto che questo è un problema con molti programmi di Windows, ma è davvero acuta con MATLAB.)

+1

Ctrl-C non funziona? – Dirk

+2

Duplicato: http://stackoverflow.com/questions/1500314/how-to-abort-a-running-program-in-matlab – gnovice

+1

No, questo è il problema. –

risposta

22

Vai alla finestra di comando e premere Ctrl-C un sacco. Dalla mia esperienza, su una macchina single-core non hai alcuna possibilità, a meno che tu non faccia un sacco di output. Su un computer multi-core o multi-processore, probabilmente lo fermerai alla fine, ma ci vuole tempo.

Vedi anche http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html

Aggiunto: si tratta di una buona pratica di (1) salvare un'istantanea della vostra area di lavoro prima di eseguire qualsiasi cosa davvero lunga e (2) all'interno di un tempo molto lungo di calcolo, scrivere alcune delle variabili a un file di volta in volta, in modo da poter riprendere il calcolo se è stato interrotto (per mancanza di alimentazione, ad esempio).

+1

Sono d'accordo, ma a volte lo uccido con il Task Manager di Windows piuttosto che bashc Ctrl-C come una scimmia demente. –

+4

+1: Colpire CTRL-C come un maniaco di solito funziona, ma ci sono situazioni in cui spegnere tutto è tutto ciò che funziona. Il che è un po 'fastidioso per non dire altro ... –

18

Quanto bene MATLAB risponde a CTRL-C dipende piuttosto da cosa sta facendo. Se è nel bel mezzo di una chiamata BLAS o LAPACK, ad esempio, non risponderà fino a quando la chiamata non ritorna. Se ti trovi in ​​un blocco di codice in cui vengono eseguite molte linee di MATLAB, puoi aspettarti che CTRL-C sia più reattivo.

1

è possibile trovare il processo MATLAB nel task manager di Windows e impostare la priorità su alto o basso e lasciare che altri programmi abbiano priorità inferiore o superiore. Nella mia esperienza, è un modo efficiente.

5

Un'altra strategia per affrontare questo problema è quello di introdurre una pausa molto breve da qualche parte nel calcolo (soprattutto in un ciclo for o while), come in:

for ii = 1:N 
do_stuff(); 
pause(0.1); 
end 

Questo aumenta la probabilità che il vostro maniacale Ctrl -C'ing lo fermerà davvero.

-3

se voi non per arrestare ed eseguire nuovamente poi uccidere non è male scelta Vai a finestre dell'attività manager-> Processi poi multato MATLAB.exe e premere il pulsante Termina processo

+11

L'OP ha detto "* senza * uccidere MATLAB". – Jeroen

+0

>> 'Mi sono reso conto che devo fermarmi e rieseguire' –

+1

Arrestare e rieseguire ** non è lo stesso ** come eliminare MATLAB. L'OP potrebbe voler conservare alcune variabili dallo spazio di lavoro che sono state create prima di eseguire lo script. Uccidere MATLAB perderà tutto, comprese quelle variabili. -1. – rayryeng

6

Ho un trucco molto semplice per mettere in pausa (o interrompere) un'esecuzione non reattiva. Se la mia simulazione è in esecuzione un lungo ciclo faccio sempre il seguente:

for ii = 1:N 
    do_stuff(); 
    clear empty_script; 
    empty_script; 
end 

e quindi creare un file empty_script.m contenente quanto segue:

%keyboard 

Ogni volta che voglio per sospendere l'esecuzione ho aprire un testo esterno editor e decommentare la riga dicendo keyboard in empty_script.m. Questo mi lascia in modalità di debug in cui posso guardare le variabili, modificare elementi o persino interrompere il programma.

Problemi correlati