繁体   English   中英

C#如何关闭所有子进程

[英]How to close all child processes in C#

C#代码:

ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.Verb = "runas";        
processStartInfo.FileName = fileNameToExecute;
processStartInfo.Arguments = parameters;
Process process = new Process();
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
process.StartInfo = processStartInfo;
process.Start();
process.WaitForExit();
process.Close();

我正在从 C# windows 应用程序调用 java.exe。 java.exe 用于测试一些网站。 Java 使用 Selenium 通过打开默认 Web 浏览器来测试网页。 它将打开 3 到 10 次浏览器并测试测试用例。 我想在 C# 应用程序中添加停止按钮,当我们单击它时,它应该关闭 java.exe 以及那些打开的浏览器。 怎么做?

我试图通过使用这样的 exe 名称来获取进程名称

Process[] processName = Process.GetProcessesByName(fileName.Substring(0, fileName.LastIndexOf('.')));

但它不起作用。

找到您的java.exe进程的进程 ID 并使用/T参数作为外部进程启动TASKKILL以杀死整个父进程树和子进程树:

例子:

TASKKILL /PID 1230 /T

MSDN Taskkill


Process process = new Process();
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;

process.StartInfo = processStartInfo;
process.Start();
javaExeProcessId = process.Id; //global variable
process.WaitForExit();
process.Close();

在开始一个新进程之前,我已经将 processId 存储在一个全局变量中。


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 (Exception ex)
    {
        // Process already exited.
    }
}


我打电话给 KillProcessAndChildren(javaExeProcessId); 在需要的地方终止当前进程及其子进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM