2012-01-31 12 views
3

Perlを使用していくつかのインストール手順を自動化しています。今、私が発射したインストール手順が完了したときを知りたい。これはどうすればいいですか?これは自動化された作業なので、後でにいくつかのコマンドを実行するよう人々に依頼することはできません。この機能は自動的に行う必要があります。どのように私はWindows上でこれを行うのですか?Perlを使用してプロセスを終了するためのポーリング

+1

質問は、正確に何を待っていますか?おそらく完了するプロセス?もしそうなら、そのプロセスの名前やPIDを知っていますか? –

+0

@GregHewgill私は窓で作業しています。だから、私はプロセスが完了するのを待っています。Windows上でプロセス終了を確認する方法を教えてください。 – Chani

答えて

3

Greg Hewgillの回答は、必要なWindows APIの機能を説明していますが、Perlでは使用できません。あなたはこのためにWin32::Processモジュールを使用することができます。一度に複数のオブジェクトを待つ必要がある場合

use strict; 
use warnings; 

use Win32::Process; 

Win32::Process::Create(
    my $process, 
    'C:\WINDOWS\system32\notepad.exe', # path of executable 
    "notepad",       # command line it sees 
    0,         # don't inherit our handles 
    NORMAL_PRIORITY_CLASS,    # process creation flags 
    "."        # current directory for process 
) or die $^E; 

print "started\n"; 

$process->Wait(INFINITE); 

print "done\n"; 

$process->GetExitCode(my $exitcode) or die $^E; 

print "process exit code $exitcode\n"; 

$processWin32::IPC機能wait_anywait_allに渡すことができます。

+0

助けてくれてありがとう – Chani

4

Windowsでは、プロセスのハンドルを使用して、WaitForSingleObject()と呼び出して、プロセスがいつ終了するかを調べます。プロセスIDだけがある場合は、OpenProcess()を使用してプロセスIDを取得できます。 (もちろん、CreateProcess()でプロセスを作成した場合は、すでにハンドルがあります)。

関連する問題