일부 VBScript를 쓰고 싶으십니까? 스크립트 바인딩을 사용하는 Windows 관리 API 인 WMI을 사용하여이 스크립트를 작성할 수 있습니다. WMI는 이미지 이름, 경로 및 명령 줄을 포함하여 컴퓨터의 모든 프로세스를 나열 할 수 있습니다. MATLAB.exes를 검색하십시오. WMI의 Win32_Process 개체는 시작 시간, CPU 및 메모리 사용량과 같은 Process Explorer에 표시되는 대부분의 정보도 노출합니다.
거의 스크립트 WMI actxserver() 및 COM 메서드 호출을 사용하여 Matlab 자체에서 가져올 수 있지만 컬렉션이 아직 제대로 작동하지 않습니다. 그러나 간단한 VBS를 작성하여 WMI 프로세스 목록 쿼리를 수행하고 Matlab에 친숙한 출력을 작성한 다음 쉘에 출력 할 수 있습니다. 이것은 작업 목록을 사용하는 것보다 더 많은 작업이지만, 작업자 프로세스가 번거롭다면 추가 정보가 유용 할 수 있습니다. 예를 들어 명령 줄, 창 제목 또는 프로세스 시작 시간을 사용하여 죽일 대상을 결정할 때 작업자를 구분할 수 있습니다.
그들을 죽이려면 WMI의 Win32_Process.Terminate 또는 shell을 taskkill 명령에 사용할 수 있습니다.
이것은 모두 Windows 전용입니다. 이식성을 높이려면 cygwin을 설치 한 다음 두 OS에서 Unix 스타일 ps 및 kill 명령으로 쉘을 만들 수 있습니다.
사이드 참고 : 일반 윈도우의 MATLAB 애플 리케이션 "-r"확인하기 위해 주요 스크립트의 맨 수준에서 시도/캐치를 사용하는 노동자의 역할을하게하는 경우 확인이 완료되면 종료됩니다
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
그렇지 않으면 M 코드에서 발생한 오류로 인해 최상위 레벨까지 올라갈 수 있고 Matlab을 기본 GUI 루프에 놓아 사용자 입력을 기다릴 수 있습니다. 그러면 정지 된 직원처럼 보입니다.
아, 그리고 Matlab에서 Matlab 프로세스를 죽이는 경우, 아마도 자신을 죽이지 않는 것이 좋습니다. 다음은 Windows64 또는 Unix에서 자신의 pid를 결정할 수있는 MEX 기능입니다. 희생자를 선택할 때 대상 프로세스의 pid와 대조하여 확인하십시오. 더 깔끔한 ifdefs는 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());
}
답변 해 주셔서 감사합니다. 답변을 모두 수락하고 싶습니다. 에스. – AnnaR