如何中止某个具有特定 PID 的进程?问:嗨,Scripting Guy!如果我知道进程的 PID,是否可以使用脚本中止这个进程? -- JV 答:嗨,JV。当然可以。致那些不太熟悉缩写的同志们:PID 是“进程标识符”(Process Identifier) 的缩写,这是创建进程时分配给它的唯一的身份证号码。(好吧,是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。)WMI 类 Win32_Process 中有一个属性 (ProcessId) 对应于 PID。假设您想要中止 PID 为 2576 的进程,以下脚本就可以做这件事情: strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where ProcessID = 2576") For Each objProcess in colProcessList objProcess.Terminate() Next 当然,您要记住 PID 是会经常变化的:尽管您现在要中止的进程的 PID 可能是 2576,但下一次创建时它可能就不会具有相同的 PID。因此,将 PID 值硬编码进来是不行的,您可能需要对这个脚本进行修改,以便它可以接受任何 PID 作为命令行参数: If Wscript.Arguments.Count = 0 Then Wscript.Echo "You must enter a PID." Wscript.Quit End If intPID = Wscript.Arguments.Item(0) strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where ProcessID = " & intPID & "") For Each objProcess in colProcessList objProcess.Terminate() Next 在上述脚本中,我们首先检查是否输入了命令行参数;如果没有输入任何命令行参数,我们就回显一条错误信息 (“You must enter a PID.”),然后退出。如果输入了一个参数,我们就使用以下代码将第一个参数分配给变量 intPID: intPID = Wscript.Arguments.Item(0) 那么如果我们输入多个命令行参数呢?哦,在上述这段简单的脚本中,我们会忽略其他参数。不过您可以修改这个脚本,以便中止与您具有的 PID 对应的多个进程。有关如何实现的更多信息,请访问以下脚本故事 专栏。 为 intPID 赋值后,我们使用 Win32_Process 类来定位这个进程并中止它。注意我们不是将 PID 硬编码进来,而是使用变量 intPID: ("Select * from Win32_Process Where ProcessID = " & intPID & "") 如果您不调用这段代码,也可以使用名称(而不用 PID)来中止进程。例如,以下脚本可中止计算机上运行的所有 Notepad.exe 实例: strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = ‘Notepad.exe‘") For Each objProcess in colProcessList objProcess.Terminate() Next 上面说过,这段代码中止的是所有 Notepad 实例。如果您只想中止特定实例,请使用 PID。这是因为 PID 对正在运行的进程来说是唯一的,而名称则不是。换句话说,PID 为 2576 的进程只有一个,但名称为 Notepad.exe 的进程却可能有很多。 有关使用脚本管理进程的更多信息,请参阅以下地址的相关部分“Microsoft Windows 2000 脚本编写指南”. |
|