C# 在WaitForExit C控制台应用程序上终止命令时出现问题

C# 在WaitForExit C控制台应用程序上终止命令时出现问题,c#,.net,console-application,C#,.net,Console Application,我通过创建新进程,使用C控制台应用程序执行Cmd命令。 面临着扼杀法国退出进程的问题 基本上,我想终止waitforexit上的命令执行。 请帮忙 代码: 由于您的应用程序正在创建其他进程,您需要终止整个进程树。在您的示例中,cmd正在终止整个进程树,但是cmd正在运行另一个运行perl脚本的应用程序,而这并没有终止。杀死整棵树的示例代码: 用法 方法 /// <summary> /// Kill a process, and all of its children, gra

我通过创建新进程,使用C控制台应用程序执行Cmd命令。 面临着扼杀法国退出进程的问题

基本上,我想终止waitforexit上的命令执行。 请帮忙

代码:


由于您的应用程序正在创建其他进程,您需要终止整个进程树。在您的示例中,cmd正在终止整个进程树,但是cmd正在运行另一个运行perl脚本的应用程序,而这并没有终止。杀死整棵树的示例代码:

用法

方法

/// <summary>
    /// Kill a process, and all of its children, grandchildren, etc.
    /// </summary>
    /// <param name="pid">Process ID.</param>
    private static void KillProcessAndChildren(int pid)
    {
        // Cannot close 'system idle process'.
        if (pid == 0)
        {
            return;
        }
        ManagementObjectSearcher searcher = new ManagementObjectSearcher
          ("Select * From Win32_Process Where ParentProcessID=" + pid);
        ManagementObjectCollection moc = searcher.Get();
        foreach (ManagementObject mo in moc)
        {
            KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
        }
        try
        {
            Process proc = Process.GetProcessById(pid);
            proc.Kill();
        }
        catch (ArgumentException)
        {
            // Process already exited.
        }
    }
参考:

KillProcessAndChildren(process.Id);
/// <summary>
    /// Kill a process, and all of its children, grandchildren, etc.
    /// </summary>
    /// <param name="pid">Process ID.</param>
    private static void KillProcessAndChildren(int pid)
    {
        // Cannot close 'system idle process'.
        if (pid == 0)
        {
            return;
        }
        ManagementObjectSearcher searcher = new ManagementObjectSearcher
          ("Select * From Win32_Process Where ParentProcessID=" + pid);
        ManagementObjectCollection moc = searcher.Get();
        foreach (ManagementObject mo in moc)
        {
            KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
        }
        try
        {
            Process proc = Process.GetProcessById(pid);
            proc.Kill();
        }
        catch (ArgumentException)
        {
            // Process already exited.
        }
    }