嗨我想在matlab中運行一個進程xfoil。問題是有時xfoil崩潰,所以繼續沒有問題,我需要運行它作爲後臺進程。然而,現在我最終遇到了一個競爭條件,即xfoil在數據需要時尚未完成。爲了解決這個問題,我添加了一個暫停語句,但是在很多情況下,暫停時間太長。我想要做的是在啓動時記錄進程id,然後在while循環中檢查進程是否仍然存在。對於windows,這是這樣完成的。取消由matlab啓動的unix進程
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中返回。任何人都可以幫助解決這個問題。 謝謝。
stat呢?有什麼嗎? –
Nope stat = 0,pid ='' – wookie1
根據'man','pidof'返回_running_程序的'pid'。你如何開始你的程序? – Floris