2010-03-08 17 views
34

Estoy ejecutando una simulación larga en MATLAB que me he dado cuenta de que necesito detener y volver a ejecutar. Sin embargo, MATLAB realmente está en este cálculo, y ha dejado de responder. ¿Cómo puedo interrumpir esta ejecución sin matar a MATLAB?¿Cómo puedo interrumpir MATLAB cuando realmente está muy ocupado?

(Sé que esto es un problema con muchos programas de Windows, pero es muy aguda con MATLAB.)

+1

Ctrl-C no funciona? – Dirk

+2

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

+1

No, ese es el problema. –

Respuesta

22

Ir a la ventana de comandos y pulse Ctrl-C mucho. Según mi experiencia, en una máquina de un solo núcleo no tienes ninguna posibilidad, a menos que obtengas muchos resultados. En una máquina multi-core o multiprocesador, probablemente lo detenga eventualmente, pero lleva tiempo.

Ver también http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html

Agregado: es una buena práctica (1) guardar una instantánea de su espacio de trabajo antes de ejecutar cualquier cosa realmente larga y (2) dentro de un tiempo muy largo cálculo, escribir algunas de las variables a un archivo de vez en cuando, para que pueda reanudar el cálculo si se interrumpió (por un corte de energía, por ejemplo).

+1

Estoy de acuerdo, pero a veces lo mato con el Administrador de tareas de Windows en lugar de Bashc Ctrl-C como un mono demente. –

+4

+1: golpear CTRL-C como un maníaco generalmente funciona, pero hay situaciones en las que cerrar todo es lo único que funciona. Lo cual es un poco molesto por decir lo menos ... –

18

Qué tan bien responde MATLAB a CTRL-C en vez depende de lo que está haciendo. Si está en el medio de una llamada BLAS o LAPACK, por ejemplo, no responderá hasta que regrese esa llamada. Si está en un bloque de código donde se ejecutan muchas líneas de MATLAB, puede esperar que CTRL-C sea más receptivo.

1

puede encontrar el proceso de MATLAB en el administrador de tareas de Windows y establecer la prioridad como alta o baja y dejar que otros programas tengan una prioridad menor o mayor. En mi experiencia, es una forma eficiente.

5

Otra estrategia para hacer frente a este problema es introducir un muy breve pausa alguna parte en el cálculo (especialmente en un for o while loop), como en:

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

Esto aumenta las posibilidades de que su maníaca Ctrl -C'ing realmente lo detendrá.

-3

si planteo que parar y volver a ejecutar a continuación, matando no es mala elección Ir a tareas de Windows Manager-> Procesos continuación multados matlab.exe y pulse el botón Terminar proceso

+11

El OP dijo "* sin * matar a MATLAB". – Jeroen

+0

>> 'Me he dado cuenta de que necesito detener y volver a ejecutar' –

+1

Detener y volver a ejecutar ** no es lo mismo ** que matar a MATLAB. El OP puede querer conservar algunas variables del espacio de trabajo que se crearon antes de ejecutar el script. Matar a MATLAB lo perderá todo, incluidas esas variables. -1. – rayryeng

6

Tengo un truco muy simple para hacer una pausa (o detener) una ejecución no receptiva. Si mi simulación se ejecuta un bucle largo que siempre hago lo siguiente:

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

y luego crear un archivo empty_script.m que contiene lo siguiente:

%keyboard 

Siempre que quiero hacer una pausa en la ejecución que abrir un texto externo edite y elimine el comentario de la línea diciendo keyboard en empty_script.m. Eso me deja en modo de depuración donde puedo ver variables, modificar cosas o incluso detener el programa.

Cuestiones relacionadas