Get the status using system(command &) when program has been closed

19 vues (au cours des 30 derniers jours)
Mario Malic
Mario Malic le 24 Août 2020
Commenté : Walter Roberson le 23 Juin 2022
Hello guys,
I have another question to ask for today.
I am running an .exe file that takes some time to finish and to output the status. This command runs within app designer and it makes the application unusable (I can click on the stuff but nothing will refresh during system command).
Question: How can I make the App drawnow during the ([ExeFile ' &']) or system (ExeFile)?
Since ExeFile generates another file, I wanted to check if it exists as follows:
system ([ExeFile ' &']); %
while isfile(File_Check) == false
drawnow
pause (0.5)
end
But it turns out that file is generated immediately and it increases size as the ExeFile is running, so this does not seem like a good approach.
I also checked the fileattribute for the File_Check and they do not change during the execution. Edit: As stated here https://www.mathworks.com/matlabcentral/answers/296657-how-can-i-check-if-i-have-read-or-write-access-to-a-directory it turns out not to be reliable.
Are there any other ways you can think of doing this?
Edit: During the ExeFile run, I get permission denied when I want to delete the file, so, I can just try renaming the file and then rename it back when the command succeeds. But I don't see this as a great idea.
  4 commentaires
Walter Roberson
Walter Roberson le 25 Août 2020
See System.Diagnostics.Process
Mario Malic
Mario Malic le 25 Août 2020
Will do, thanks Walter.

Connectez-vous pour commenter.

Réponse acceptée

Mario Malic
Mario Malic le 26 Août 2020
Modifié(e) : Mario Malic le 26 Août 2020
Here's an example with simple app.
Process = System.Diagnostics.Process;
Process.Start('notepad.exe');
% You can check if process is still running
while(Process.HasExited == false)
% do something
end
If you are running an executable file with input arguments as linked from the answer belowhttps://www.mathworks.com/matlabcentral/answers/264364-executable-in-matlab-help#answer_206712 (It could be good if mods can accept that answer)
Exe_Process = System.Diagnostics.Process;
Exe_Process.StartInfo.Arguments = '-example arguments';
Exe_Process.StartInfo.FileName = 'C:\program.exe' % full file path
Exe_Process.Start();
% If you need to execute commands while Exe_Process is running
while Exe_Process.HasExited == false
% do something
pause (0.1) % so MATLAB doesn't check if .exe has stopped silly amount of times
end
Thanks again for the hint Walter!
  4 commentaires
Jonathan Gimeno
Jonathan Gimeno le 23 Juin 2022
Modifié(e) : Jonathan Gimeno le 23 Juin 2022
Thanks for the proposed solution, unfortunately I dont have available parfeval function.
I choose to do it the hard way:
% Execute in background the system command:
command = "<command_name> & "
system(command)
% get system command pid
[status, command_pid ]= system("ps aux |grep [c]ommand_name | awk '{print $2}'");
check_pid_is_alive = strcat("ps --pid ", command_pid);
while ~(system(check_pid_is_alive))
% do something
end
Walter Roberson
Walter Roberson le 23 Juin 2022
Ah, background thread needs r2021b

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by