.net core - 如何正确终止已启动的进程?

Lir*_*man 6 c# asp.net-core-2.0

我有一个 dotnet core 2.0 控制台应用程序,可以启动另一个 dotnet core WebAPI。问题是,当控制台应用程序关闭时,如何干净地终止 WebAPI 进程?因为到目前为止,我无法启动该进程两次,因为它给出了地址正在使用的错误,我仍然可以在任务管理器中看到该进程。

这是我尝试这样做的方式,但似乎缺少完全杀死所有进程的东西:

class Program
{
    static Process cmd;

    static async Task Main(string[] args)
    {
        AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;

        var startInfo = new ProcessStartInfo("cmd.exe")
        {
            UseShellExecute = false,
            RedirectStandardInput = true,
            CreateNoWindow = true,
        };

        cmd = new Process { StartInfo = startInfo };

        cmd.Start();

        using (cmd)
        {
            cmd.StandardInput.WriteLine($"cd C:/Project/publish");
            cmd.StandardInput.WriteLine($"dotnet WebAPI.dll");
            cmd.WaitForExit();
        }
    }

    static void CurrentDomain_ProcessExit(object sender, EventArgs e)
    {
        Process.GetProcessById(cmd.Id).Kill();
        Environment.Exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

Lir*_*man 1

根据 @mjwills 的建议,我已更新流程如下:

class Program
{
    static Process webAPI;

    static async Task Main(string[] args)
    {
        AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;

        webAPI = new Process
        {
            StartInfo = new ProcessStartInfo("dotnet")
            {
                UseShellExecute = false,
                WorkingDirectory = "C:/Project/publish",
                Arguments = "WebAPI.dll",
                CreateNoWindow = true
            }
        };
        using (webAPI)
        {
            webAPI.Start();
            webAPI.WaitForExit();
        }
    }

    static void CurrentDomain_ProcessExit(object sender, EventArgs e)
    {
        webAPI.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我没记错的话 webAPI.Close(); 仅释放与该进程关联的所有资源。然后你如何杀死子进程。 (2认同)