2

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

4

2 に答える 2

1

コメントで述べたように、実行中のプログラムpidofのみを取得します。pidコマンドxfoilがプログラムを実行するものである場合は、試してみてください

xfoil < foilcommands &; /sbin/pidof xfoil > dump.out

次に、 の内容を確認しdump.outます。私はあなたのpid意志がそこにあると思います...

于 2013-08-01T14:38:19.070 に答える