2010-02-24 138 views
0

我正在編寫一些Java代碼,需要能夠在類Unix以及Windows計算機上編寫pidfile。在UNIX機器我寫了一個包含這樣的如何在Windows批處理文件中編寫pidfile

command 1>/dev/null 2>&1 & 
echo $! > pidfile 

它執行的命令,所有輸出重定向到娜,並把命令到後臺(從外殼脫離它)一個bash shell腳本。 pidfile包含該命令的進程標識。然後,我可以隨後從文件中讀取進程ID。這一切都很好。

現在在Windows上我覺得我應該這樣做

start command 

然後以某種方式等同於Unix的方式。問題是我無法控制哪些程序將用於Windows版本或機器上安裝的程序。我也無法訪問Windows機器來測試事情,並且在網絡上找不到任何簡單的東西。我知道PowerShell中有get-process函數,但我不知道PowerShell是否會安裝在機器上,所以我不能依賴它。

是否有一些簡單的DOS批處理文件命令或語法來做我所需要的?

+0

你是否在使用它來鎖定或查殺? – 2010-02-24 19:29:20

+0

我需要能夠在稍後獨立地終止命令。這將是JVM的全新啓動,因此不需要Java內部緩存或任何可以使用的內容。 – 2010-02-26 18:09:45

回答

2

你可以在命令行上使用一個VBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strProcess = objArgs(0) 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") 

Error = objWMIService.Create(strProcess, null, null, intProcessID) 
If Error = 0 Then 
    Wscript.Echo intProcessID 
Else 
    Wscript.Echo Error 
End If 

,說,如果你想執行記事本:

c:\test> cscript //nologo mycreatepid.vbs "notepad.exe" 
3120 

,你可以使用一個for循環捕獲批處理文件的返回值。 (否則,你可以學習使用VBScript,並在VBScript中做所有事情)

+0

我可以假設VBScript被安裝在任何Windows機器上嗎? – 2010-02-26 18:12:05

+0

是的。 win9x以上版本 – ghostdog74 2010-02-26 23:45:42

+0

雖然您可以輕鬆地單獨獲取它,但WSH並未隨Windows 95一起提供,但我相當確信95以後的OEM版本以及所有版本的98都包含它。無論如何,我會假設它的存在; Windows 95的支持現在已經正式停用了近十年。 – ephemient 2010-02-28 06:53:01

相關問題