嗨,在这种情况下,我正在尝试从 matlab 运行一个进程 xfoil。问题有时是 xfoil 崩溃,因此要继续进行而没有问题,我需要将其作为后台进程运行。但是现在我最终遇到了一个竞争条件,其中 xfoil 在需要数据时还没有完成。为了解决这个问题,我添加了一个暂停语句,但在许多情况下,暂停太长了。我想做的是在启动时记录进程ID,然后在while循环中检查进程是否仍然存在。对于 Windows,这是这样完成的。
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)
但是,进程 ID 不会在 pid 或 dump.out 中返回。任何人都可以帮助解决这个问题。谢谢。