¿Desea escribir algunos VBScript? Puede crear una secuencia de comandos usando WMI, una API de administración de Windows con enlaces de scripts. WMI puede enumerar todos los procesos en una máquina, incluidos el nombre de la imagen, la ruta y la línea de comando. Busque el MATLAB.exes. El objeto Win32_Process de WMI también expone la mayor parte de la información que muestra Process Explorer, como la hora de inicio, la CPU y el uso de la memoria.
Puede casi script WMI desde dentro de Matlab utilizando actxserver() y las llamadas al método COM, pero las colecciones no funcionan del todo bien. Pero puede escribir un VBS simple para hacer la consulta de la lista de procesos de WMI y escribir resultados compatibles con Matlab, y luego pagarlos. Este es un trabajo más que utilizar la lista de tareas, pero es posible que la información adicional le resulte útil si está resolviendo varios procesos de trabajo. Por ejemplo, las líneas de comando, los títulos de las ventanas o los tiempos de inicio del proceso podrían usarse para diferenciar a los trabajadores al decidir qué matar.
Para matarlos, puede usar Win32_Process.Terminate de WMI, o pagar al comando taskkill.
Esto es todo solo para Windows. Si desea que las cosas sean portátiles, puede instalar cygwin, y luego pagar las unidades ps de estilo Unix y cancelar comandos en cualquier sistema operativo.
nota
lateral: si usted está haciendo regulares aplicaciones de Windows Matlab actúan como trabajadores con "r", utilizar un try/catch en el nivel superior de su script principal para asegurarse de que salga al terminar:
try
do_your_work();
catch err
warning('Got an error: %s', err.message);
end
close force all % prevent figures from making quit() balk
quit force
De lo contrario, un error en el código M podría aparecer hasta el nivel superior y colocar Matlab en el bucle principal de la GUI en espera de la entrada del usuario, y se verá como un trabajador colgado.
Ah, y si estás matando los procesos Matlab de Matlab, probablemente quieras evitar matarte. Aquí hay una función MEX que le permitirá determinar su propio pid en Windows64 o Unix; compruébelo con los pides de los procesos objetivo al elegir víctimas. Fancier ifdefs lo hará funcionar en win32.
/* mygetpid.c - MEX function to get PID */
#ifdef _WIN64
#include <process.h>
#define GETPID _getpid
#else
/* assume we're on Unix */
#include <unistd.h>
#define GETPID getpid
#endif
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]
)
{
/* ... a real function would have nargin/nargout checks here... */
plhs[0] = mxCreateDoubleScalar((int) GETPID());
}
Gracias a todos por las respuestas! Me gustaría aceptar todas sus respuestas s. – AnnaR