我使用以下内容来杀死本地进程:
Sub KillProcess(ByVal ProcessName As String)
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName(ProcessName)
pProcess(0).Kill()
End Sub
我用以下内容调用上述内容:
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
KillProcess("acsAPP")
KillProcess("acsSRV")
KillProcess("ACSTrans")
KillProcess("acsCNTRL")
KillProcess("acsRep")
End Sub
显然,上面只会杀死父进程而不是整个树(多个进程以相同名称运行)。如何杀死列出的所有同名进程?必须有一个力开关或类似的东西。
谢谢!
答案 0 :(得分:3)
正如您在KillProcess()
中看到的那样,您只会杀死1个进程,而GetProcessesByName()
正在返回进程列表。尝试使用以下方法替换您的方法,循环遍历所有进程并将其全部删除;
Private Sub KillProcess(ByVal ProcessName As String)
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName(ProcessName)
For Each p As Process In pProcess
p.Kill()
Next
End Sub
答案 1 :(得分:2)
如果查看GetProcessByName上的文档,您会看到它返回与该名称匹配的进程的 Array (顺便提一下,没有进程树这样的东西)没有进程的层次结构。)
您只是杀死数组中的第一个:pProcess(0)
。注意(0)
是数组中的第一个元素,因为它基于零。
要解决此问题,您需要终止匹配的所有进程:
Sub KillProcess(ByVal ProcessName As String)
For Each proc As Process In System.Diagnostics.Process.GetProcessesByName(ProcessName)
proc.Kill()
Next
End Sub