父进程崩溃后的 C# 子进程行为



我有一个简单而有趣的问题。

我需要从 C# 应用程序启动一个进程(节点.js服务器)。

我找到了一段代码,解释了如何从应用程序内启动服务器。

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"c:nodenode.exe";**//Path to node installed folder****
string argument = "\ bundlemain.js";
p.StartInfo.Arguments = @argument;
p.Start();

我的问题是:如果父进程(C#应用程序)崩溃,此过程会发生什么?子进程会退出/崩溃还是会继续运行,因为它是一个完全独立的程序?

在它继续运行的情况下,有没有办法"链接"这两个进程以确保在父进程崩溃时子进程退出?

尝试了如下代码,如果您想关闭进程,则必须使用此函数process.CloseMainWindow();这将关闭您启动的进程。

public static void Main()
{    
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.FileName = "cmd.exe";
process.StartInfo = startInfo;
process.Start();
Console.ReadLine();
process.CloseMainWindow();
process.Close();
}

在上面的代码中,我开始cmd.exe,因为它有自己的窗口,我编码CloseMainWindow()关闭该程序的功能。

由于Cmd是单独的进程,因此当您关闭启动它的程序时,它不会关闭。

如果父进程崩溃(在进程之前)。关闭主窗口();)?

问题的答案是:如果在调用CloseMainWindow之前关闭父进程,则Cmd进程将不会关闭

试试这个来检查它

public static void Main()
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
startInfo.FileName = "cmd.exe";
process.StartInfo = startInfo;
process.Start();
throw new Exception("test");
Console.ReadLine();
process.CloseMainWindow();
process.Close();
}

在上面的代码中,主程序出现异常,它在关闭子进程之前创建,然后在这种情况下,子进程将运行。

如果要在应用程序关闭时强制关闭外部启动的进程,则使用Application.ApplicationExit事件,并调用外部进程对象的CloseMainWindow()函数。

最新更新