2011-03-13 112 views
1

我使用一個命令行下面的腳本來殺死一個假設的記事本程序(使用Windows XP中KornShell(KSH),如果該事項):問題運行批處理腳本來殺死一個進程

殺$(任務列表| grep的-i的notepad.exe | awk的 '{打印2}')

現在我走這條線,並把它變成一個批處理文件C:\ TEMP \ testkill.bat,以爲我也應該能夠通過運行批處理文件來終止進程。然而,當我運行該批處理文件,我得到不對稱的括號以下AWK錯誤:./testkill.bat

C /溫度>:

ç\ TEMP>殺$(任務列表| grep的-i Notepad.exe的| AWK '{打印$ 2}')
AWK:不平衡()上下文是:
>>> {打印$ 2})< < <
C:/溫度>

所以我很沮喪當我通過批處理文件運行此腳本時,爲什麼我得到有關不平衡括號的此錯誤,但是當我直接從命令行運行命令時沒有問題?

(我不必拘泥於殺死進程這樣 - 我還奇怪,爲什麼如果我寫在命令行中執行以下操作:

任務列表| grep的-i的notepad.exe | awk的' {打印$ 2}」 |殺

散發出來的任務列表/ grep的/ awk的電話似乎並不正確獲得管道殺死進程ID

回答

2

爲什麼你,如果你製作一個批處理文件。有一個Korn外殼?寫一個外殼腳本 - 這將公關可以幫助你很多。

我可以回答你的最後一個問題 - kill不會從標準輸入中取出PID,它會在命令行上執行。您可以使用xargs使其工作:

tasklist | grep -i notepad.exe | awk '{print $2}' | xargs kill 
+0

感謝您的答覆,@ carl-norum。你提到的xargs確實解決了我的第二個問題。但是,如果我現在將xargs的這一行放入批處理文件中,而我沒有收到錯誤,則該進程不會被終止。 我是一個總新手 - 對於這樣簡單的事情,我不確定我是否理解將這一行放在批處理文件和shell腳本之間有什麼區別?例如,如果我將這個文件稱爲testkill.sh並從命令行運行'sh testkill.sh',我仍然有同樣的問題,即沒有錯誤,但該進程不會被終止。 – user657064 2011-03-13 03:18:41

+0

@ user657064 - 你如何運行Korn shell?例如,我認爲cygwin的PID不一定與Windows的進程ID保持一致。 – 2011-03-13 03:43:16

+0

@ carl-norum:我通過MKS Toolkit運行Korn shell。在完全相同的Korn shell會話中,我可以打開Windows記事本,運行你寫的命令,它會殺死記事本進程,但是如果我重新打開記事本然後運行批處理文件或shell腳本,記事本不會被終止。我會認爲用grep/awk解析tasklist的意義在於,無論其PID如何,我都能夠終止進程。而且,當我運行ps而不是tasklist時,我獲得了相同的PID。 – user657064 2011-03-13 07:29:50