2010-02-24 144 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

相关问题