杀死本地进程

时间:2014-09-03 12:44:52

标签: .net vb.net process kill-process

我使用以下内容来杀死本地进程:

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

显然,上面只会杀死父进程而不是整个树(多个进程以相同名称运行)。如何杀死列出的所有同名进程?必须有一个力开关或类似的东西。

谢谢!

2 个答案:

答案 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