Привет Я пытаюсь запустить процесс xfoil в этом случае из matlab. Проблема в том, что иногда xfoil падает, поэтому для продолжения без проблем мне нужно запустить его как фоновый процесс. Однако теперь я заканчиваю условие гонки, когда xfoil не закончил к тому времени, когда данные необходимы. Чтобы решить эту проблему, я добавил оператор паузы, но во многих случаях пауза слишком длинная. То, что я хотел бы сделать, это записать идентификатор процесса при запуске в течение цикла while, если процесс все еще существует. Для окон это выполняется так.Отмена процесса unix, начатого matlab
elseif(ispc)
run_xfoil_command='start /b xfoil.exe <foilcommands> dump.out';
[~,~] = system(run_xfoil_command);
tic;
% While xfoil hasn't finished running
while (system('tasklist /FI "IMAGENAME eq xfoil.exe" 2>NUL | find /I /N "xfoil.exe">NUL')==0)
if (toc>5)
[~,~] = system('taskkill /F /IM xfoil.exe > dump1.out');
break
end
pause(0.2);
end
[~,~] = system('taskkill /F /IM cmd.exe > dump1.out');
end
Однако я не могу понять, как это сделать в Linux. Я пробовал;
if(isunix)
run_xfoil_command='pidof xfoil <foilcommands> dump.out &';
setenv('GFORTRAN_STDIN_UNIT', '5')
setenv('GFORTRAN_STDOUT_UNIT', '6')
setenv('GFORTRAN_STDERR_UNIT', '0')
tic;
[stat,pid] = unix(run_xfoil_command)
Однако идентификатор процесса не возвращается ни в pid, ни в dump.out. Может ли кто-нибудь помочь решить эту проблему. Спасибо.
Что относительно stat? Что-нибудь там? –
Nope stat = 0, pid = '' – wookie1
По словам 'man',' pidof' возвращает 'pid' программы _running_. Как начать свою программу? – Floris