2012-12-30 15 views
1

殺死一個過程中,我寫了一個代碼運行exe文件如下:無法在Perl

#!/usr/local/bin/perl  
use Cwd;      
$directory = 'e:/USER/'; 
chdir($directory) or die ; 
system("Bnc25-Windows.exe -nw"); 

現在我要再寫代碼來阻止它。我寫道:

#!/usr/local/bin/perl  
use Cwd;      
$directory = 'e:/USER/'; 
chdir($directory) or die ; 
kill Bnc25-Windows.exe ; 

,但它不工作,我在該exe文件運行任務管理器窗口中看到。 我真的不知道問題出在哪裏。感謝您的任何幫助

回答

4

您正在使用Windows。 Windows中沒有kill命令。您可以使用taskkill

再次使用system函數。

system("taskkill /im Bnc25-Windows.exe /f"); 
+0

謝謝,是的,這是我所需要的。 –

+1

我認爲這是錯誤的情況。 Windows的'kill'命令是'taskkill',但Perl的'kill'運算符在Windows上正常工作。 – Borodin

+0

... @Borodin:但perl的'kill'函數可以解決的進程ID的命名空間不一定與'taskkill/PID'可以解決的問題相同。對於Cygwin perl來說,至少它們是不同的。 – david

0

kill殺死進程通過PID。您需要killall以可執行文件名殺死進程。兩者都是unix命令,可通過cygwin獲得(您可能正在使用該命令)。

4

Perl kill function需要(信號名稱/編號和)您要殺死的進程的數字ID,而不是它的名稱。

作爲一般性的建議,我會強烈建議開始你的代碼:

use strict; 
use warnings; 

和修復它們產生的任何錯誤和警告。

例如,如果你這樣做了,在你的問題的代碼,你會一直(固定圍繞Bnc25-Windows.exe缺失報價和$directory第一個聲明之前丟失的my後,使代碼通過strict檢查)收到以下警告:

Unrecognized signal name "Bnc25-Windows.exe" at test.pl line 7. 

這已經告訴你,kill試圖解析"Bnc25-Windows.exe"作爲信號名稱,這已經表明有什麼東西不對你想使用它的方式,並希望能夠引導您查看這兩個文檔中的文檔(請參閱上面的鏈接)這是在Perl中使用kill函數的正確方法,也鏈接到了關於在非Unix系統上使用它的portability warnings