0

perl から 2 つの Windows プログラムを実行しようとしています。それらからperlへの出力は必要なく、その後もperlを実行し続ける必要があるため、私の最善のアプローチはシステムを使用することです

(コードの一部)

######  Exec 1.exe and 2.exe  ################################################
system(1,"1.exe" );
system(1,"2.exe data.tmp");

2.exe は常に「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」を返しますが、スクリプトは機能します。

1.exe は問題なく動作します。

試してみました: ###### Exec 1.exe および 2.exe ################################ ## system("start /b 1.exe"); system("start /b 2.exe data.tmp");

同じ結果です。

1.exeと2.exeを起動するバットも作ってみた

######  Exec 1.exe and 2.exe  ################################################
system(1,"start /b 1.bat");

繰り返しますが..同じ結果です。

残りのスクリプトを実行1.exe2.exeて取得し、それに従うだけです。data.tmp

4

2 に答える 2

1

私はそれ1.exeが作成すると思いますdata.tmpか?問題は、アクセスしようとする前に1.exe完了していないことです。data.tmp2.exe

1.exe起動する前に完了するのを待っても問題2.exeない場合は、次のいずれかを使用できます。

  1. 2.exeメインプログラムに進む前に、完了するのを待ちます。

    system("1.exe");
    system("2.exe data.tmp");
    
  2. 1.exeメインプログラムに進む前に、完了するのを待ちます。

    system("1.exe");
    system(1, "2.exe data.tmp");  # Don't wait for 2.exe to complete
    
  3. メインプログラムに進む前に、まったく待たないでください。

    system(1, "1.exe & 2.exe data.tmp");  # Don't wait for this to complete
    
于 2013-10-30T13:33:51.307 に答える
1

1.exeを使用すると仮定するdata.tmpと、 に対してブロックされ2.exeます。

を使用してsystem(1, )います。プロセスが終了するのをまったく待ちません。1各システムコールが終了するのを待たずに試すことができます。通常の状態では、問題を解決する必要があります。

system("1.exe" );
system(1, "2.exe data.tmp");

実行中に何かを実行する必要があった場合は、完了するまで1.exe待ってから開始してください。1.exe2.exe

my $pid = system(1, "1.exe");
... do things while 1.exe runs ...
waitpid($pid, 0);
system(1, "2.exe data.tmp");

これにより、いつ何が起こるかをより細かく制御できます。

于 2013-10-30T09:53:21.890 に答える