Can I stop MATLAB when it's being busy?

380 visualizaciones (últimos 30 días)
matar maoz
matar maoz el 30 de Jun. de 2011
Comentada: madhan ravi el 9 de Jul. de 2020
If MATLAB runs a code, and takes not responding (displaying 'Busy' at the lower bar, next to start button), it removes the - >> sign from the command window, and I cant do anything but close it from the windows's task manager.
Is there a more elegant approach to that problem?
Matar Maoz

Respuesta aceptada

Jan
Jan el 30 de Jun. de 2011
Sometimes even Ctrl-C does not work, when Matlab has no chance to evaluate the events. Therefore a DRAWNOW can be helpful in longer loops. Even in Mex files this can be done using mexCallMATLAB.
  5 comentarios
Walter Roberson
Walter Roberson el 9 de Jul. de 2020
stop the app (might not be enough to just close the window on Android).
madhan ravi
madhan ravi el 9 de Jul. de 2020
In iOS even if I close and start the app sometimes it’s a never ending story. For example if there’s some code using input() if something other than numeric is given it stays forever unless I give in a proper value, wasted a lot of time figuring out , how to stop it.

Iniciar sesión para comentar.

Más respuestas (5)

Kaveh Vejdani
Kaveh Vejdani el 17 de Mzo. de 2020
This is one of the major flaws of MATLAB. Although Ctrl+C "sometimes" works, the very fact that it doesn't "always" work makes it a major blunder on behalf of mathworks. The absurd yet only solution in these situations is to close down MATLAB and launch it again.
  2 comentarios
Walter Roberson
Walter Roberson el 17 de Mzo. de 2020
MATLAB calls into third-party libraries such as LAPACK and MKL for high performance computation.
Mathworks cannot know when it is safe to interrupt those libraries -- do not know, for example, whether they are in the middle of a memory operation that could lead to references to memory being lost, or lead to corrupt pointers if the operation is interrupted. Therefore Mathworks cannot safely force a termination when it has made a call into one of those libraries... and those libraries do not generally provide a hook to terminate them early.
Therefore in order to resolve this "major blunder on behalf of mathworks", it would be necessary for Mathworks to get the source code for each of those libraries, and make a customized version of them that had safe interruptions built in, and it would have to add those changes in to every new release from the third-party. This is a fair bit of work, and it is likely to introduce bugs and subtle incompatibilities.
Source code for LAPACK is made available, and there is even a tool available to optimize the heck out of LAPACK for any given nardware / software configuration (the tool usually takes about 30 hours to run!) so for LAPACK it is theoretically possible to do.
However, MKL is an Intel product that it supplies only in binary form. I think that I heard about 5 years ago that a source code license cost $US 1 million. It is highly optimized for each different intel CPU type, with specific machine language calls, so it would be a lot of work for Mathworks to maintain its own custom version just for the purpose of permitting clean interrupts.
Fine tuned code at the machine level, tuned by the manufacturers of the CPU, often has very very subtle (and possibly undocumented) interactions, such that adding in a single instruction that "logically" should work, can result in much much lower performance.
The one product that Mathworks has reasonable control over but does not do a good job on interrupts, is their Symbolic Toolbox. The MuPAD engine operates in a different process, and MATLAB sends the process commands and receives results, with there seeming to be no designed way at present for MATLAB to send an interrupt request. That is, however, under Mathworks' control, and at least on Mac and Linux, even without having to write new TCP protocol handling, MATLAB could use signal() to request an interrupt, and since it has full control over the code, could reasonably put in protected areas (to avoid corruption) and interrupt handlers. I think they could do better on that; it is their library. However, interrupts in third-party libraries are not reasonably under Mathworks control.
Walter Roberson
Walter Roberson el 17 de Mzo. de 2020
A major cause, especially on Windows, that control-C can have no effect, is in the case where more RAM has been requested than is physically present, and the operating system is busy swapping to and from disk. I am not aware of any comoperating system that does a good job of interrupt handling in that situation; it seems to me that Windows is poor on this regard. This is an operating system matter, though, not a MATLAB matter.

Iniciar sesión para comentar.


Andrei Bobrov
Andrei Bobrov el 30 de Jun. de 2011
Ctrl+Break
  3 comentarios
Matt Fig
Matt Fig el 30 de Jun. de 2011
I did not know about ctrl+Break. Thanks andrei!
Yujia Zhai
Yujia Zhai el 1 de Jun. de 2019
Editada: Yujia Zhai el 1 de Jun. de 2019
Come on! Why dont you just talk to Matlab and indicate it to stop?

Iniciar sesión para comentar.


Fangjun Jiang
Fangjun Jiang el 30 de Jun. de 2011
I usually press ctrl+c or ctrl+d.
I don't know how I get the idea of pressing ctrl+d but I remembered it worked sometimes. Here is a reference to the MATLAB documentation.
Stopping Execution
To stop execution of whatever is currently running, press Ctrl+C or Ctrl+Break. On Apple Macintosh platforms, you can also use Command+. (the Command key and the period key) to stop the program. For certain operations, stopping the program might generate errors in the Command Window.
For files that run a long time, or that call built-ins or MEX-files that run a long time, Ctrl+C does not always effectively stop execution. Typically, this happens on Microsoft Windows platforms rather than UNIX[1] platforms. If you experience this problem, help MATLAB break execution by including a drawnow, pause, or getframe function in your file, for example, within a large loop. Note that Ctrl+C might be less responsive if you start MATLAB with the -nodesktop option.
  2 comentarios
matar maoz
matar maoz el 30 de Jun. de 2011
in matlab r2010b there is no such hot key combo as ctrl+d
only the ctrl+shift+d which docks the current pane.
niraj
niraj el 13 de Mzo. de 2019
Thanks Fangjun Jiang, control+break definitly works, even in worst situation. My MATLAB was struck in a never ending plot loop, still it worked by pressing control+break.

Iniciar sesión para comentar.


Adrian Jacov
Adrian Jacov el 23 de Ag. de 2016
Excelente gracias,

Muhammad Usama Sharaf SAAFI
Muhammad Usama Sharaf SAAFI el 24 de En. de 2020
You should press ctrl+c in such scenarios.
MATLAB will stop all excecution.
  1 comentario
Walter Roberson
Walter Roberson el 17 de Mzo. de 2020
control+c will not alway stop immediately. In fact, it can take a number of hours before it stops in some cases.

Iniciar sesión para comentar.

Categorías

Más información sobre Debugging and Analysis en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by