PDA

View Full Version : [MATLAB] Monitoraggio processo in bkg


Simonex84
23-04-2015, 13:13
devo necessariamente monitorare un processo in esecuzione da script Matlab per capire nello specifico quando termina e proseguire con l'esecuzione dello script.

Il problema nasce dal fatto che devo lanciare un programma esterno che però invece di manetene il controllo fino a fine esecuzione restituisce subito il controllo e prosegue in bkg, il problema però è che io da Matlab devo aspettare la fine dell'esecuzione per proseguire con lo script.

al momento sto facendo così:


dos('C:\GHS\adamulti506\simppc.exe -dec -cpu=ppc745 csci.exe');
result = 'simppc_compat.exe';
while ~isempty(strfind(result,'simppc_compat.exe'))
pause(10);
[~, result] = dos('tasklist');
end


il task che devo monitorare è 'simppc_compat.exe'

pause(10) mi serve perchè 'simppc_compat.exe' non parte all'istante appena lancio il comando 'dos('C:\GHS\...)', ho messo 10 secondi che dovrebbero bastare però mi serve una soluzione migliore nel caso impieghi un tempo maggiore a partire

vi viene in mente una soluzione più semplice?

Daniels118
23-04-2015, 13:31
Ma simppc_compat.exe viene lanciato da simppc.exe?
Questo simppc.exe è un programma che fai fatto tu? Eventualmente si può modificare? Hai la possibilità di saltare simppc.exe e richiamare direttamente simppc_compat.exe?

Simonex84
23-04-2015, 13:33
Ma simppc_compat.exe viene lanciato da simppc.exe? SI
Questo simppc.exe è un programma che fai fatto tu? NO
Eventualmente si può modificare? NO
Hai la possibilità di saltare simppc.exe e richiamare direttamente simppc_compat.exe? NO

Il problema è nato perchè abbiamo aggiornato il tool che contiene questo 'simppc.exe', la vecchia versione una volta lanciata manteneva il controllo fino a fine esecuzione, invece la nuova versione da questo problema.

Non posso neanche contattare il produttore del tool per supporto per motivi commerciali.

Devo arrangiarmi con quello che ho io, usando il nuovo 'simppc.exe' e Matlab, il pezzo di codice che ho scritto funziona, però non è sicuro che lo faccia sempre

Daniels118
23-04-2015, 15:18
Se hai la possibilità di scrivere un exe puoi sostituire il programma simppc_compat.exe con uno scritto da te che fa 2 cose:
1) richiama il programma simppc_compat.exe originale passando gli stessi parametri che prende in input e ne attende il completamento, recuperando il return code e restituendolo a sua volta;
2) crea un file "semaforo" in un path predefinito.

Da matlab dovrai cancellare preventivamente il file "semaforo", richiamare simppc.exe, ed attendere che compaia il file "semaforo".

Il simppc_compat.exe originale dovrà essere ovviamente rinominato e lasciato nello stesso path.

Questo metodo non funziona sempre, ma nel 99% dei casi va più che bene.

Simonex84
23-04-2015, 15:25
Se hai la possibilità di scrivere un exe puoi sostituire il programma simppc_compat.exe con uno scritto da te che fa 2 cose:
1) richiama il programma simppc_compat.exe originale passando gli stessi parametri che prende in input e ne attende il completamento, recuperando il return code e restituendolo a sua volta;
2) crea un file "semaforo" in un path predefinito.

Da matlab dovrai cancellare preventivamente il file "semaforo", richiamare simppc.exe, ed attendere che compaia il file "semaforo".

Il simppc_compat.exe originale dovrà essere ovviamente rinominato e lasciato nello stesso path.

Questo metodo non funziona sempre, ma nel 99% dei casi va più che bene.

provo ad implementare sia l'opzione 1 che la 2, poi nel WE lancio una batteria di test e vediamo qualle da meno problemi :D

alla 2 ci avevo già pensato, però volevo evitare di creare file temporanei in giro

Daniels118
23-04-2015, 15:47
Ehm, le due "opzioni" non erano in alternativa, devono essere eseguite entrambe, in quell'ordine :D

Simonex84
23-04-2015, 15:50
Ehm, le due "opzioni" non erano in alternativa, devono essere eseguite entrambe, in quell'ordine :D

si giusto che scemo :muro: :muro: inizio ad essere stanco, per fortuna fra 10 minuti vado a casa :D