2012-01-31 64 views
3

我使用Perl自動執行一些安裝過程。現在我想知道什麼時候我發起的安裝過程已經完成。我該怎麼做呢?由於這是自動化工作,我不能要求人們在稍後的時間點點火。這個功能應該是自動的。我如何在Windows上執行此操作?使用Perl輪詢流程退出

+1

問題是,你到底在等什麼?也許完成一個過程?如果是這樣,你知道過程的名稱或PID嗎? – 2012-01-31 05:56:29

+0

@GregHewgill我在windows上工作,所以你..我會等待一個過程完成..你能告訴我如何檢查在Windows上的進程終止。 – Chani 2012-01-31 06:57:46

回答

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"; 

$process也可以被傳遞給Win32::IPC功能wait_anywait_all如果你需要等待多個對象在同一時間。

+0

感謝您的幫助 – Chani 2012-01-31 11:42:11

4

在Windows上,使用該進程的句柄並調用WaitForSingleObject()來查明進程何時終止。如果您只有進程ID,則可以使用OpenProcess()來處理它。 (當然,如果你用CreateProcess()自己創建了這個進程,你已經有了一個處理它的方法。)