2016-06-10 67 views
4

我是否需要使用特定的退出碼?我該如何輕輕地殺死ActiveState Perl中的一個進程?

Win32::Process::Create(
    $ProcessObj, 
    "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe", 
    "firefox -no-remote -P $prof_name", 
    0, 
    NORMAL_PRIORITY_CLASS, 
".")|| die ErrorReport(); 
$ProcessObj->kill(0); 

這樣,它會殺死但不會輕微地產生Firefox配置文件的問題。

+1

如果是窗口的應用程序(而不是一個控制檯應用程序),您可以發送一個戒菸消息到其消息隊列 – ikegami

回答

5

Short  除了Window的taskkill以外的其他常用方法都很有用。感謝mobmelpomene


Win32::Process文檔沒有說什麼方法KillKillProcess做,但他們似乎很生硬了。 Windows確實提供瞭如何終止進程的層次結構,例如參見graceful termination via winapi上的這篇文章,即使它沒有UNIX的信號。然而,這顯然沒有被模塊使用,也沒有被kill使用(參見結束)。

Windows自己的taskkill應該很好地要求進程終止。通過在系統的控制檯上運行taskkill /?來查詢標誌。這裏是taskkill on MS technet的文檔。例如,這由它的$pid終止進程,與其子

my $pid = $ProcessObj->GetProcessID(); 
system("taskkill /t /pid $pid"); 

沿着如果GetProcessID()不返回真實身份識別碼,請參閱下面的其他方式連接的方法。

我現在無法在Windows上測試。第二部分this post中有更多相關細節。


Perl的kill在Windows上顯然很有力。從perlport

... kill($sig, $pid)終止由$pid標識的進程,並使其與退出狀態$sig立即退出。

感謝melpomene的評論和文件鏈接。

exitcode,我相信只會告訴處理向系統報告什麼作爲退出。

+0

taskkill的'/ F'標誌表示「不要溫和」 – mob

+0

@mob啊,謝謝!糾正。我應該知道 - F很可能代表'武力'。 – zdim

+0

Windows沒有信號。在Windows上,['kill $ n,$ pid'強制進程'$ pid'以狀態'$ n'](http://perldoc.perl.org/perlport.html#kill)退出。 – melpomene

0

據我所知,在Perl中,你可以只是做

kill -15 (pid) 

在Perl誰輕輕地殺死一個過程