こんにちは、この場合、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 にも返されません。誰でもこの問題を解決するのを助けることができますか? ありがとう。