父进程崩溃后的 C# 子进程行为
C# child process behaviour after parent crash
我有一个简单而有趣的问题。
我需要从 C# 应用程序启动一个进程(node.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:\node\node.exe";**//Path to node installed folder****
string argument = "\ bundle\main.js";
p.StartInfo.Arguments = @argument;
p.Start();
我的问题是:如果父进程(C# 应用程序)崩溃,此进程会发生什么情况?子进程会 exit/crash 还是会保留 运行 因为它是一个完全独立的程序?
在它保持 运行 的情况下,有没有办法 "link" 这两个进程确保在父进程崩溃时子进程退出?
试过你的代码如下,如果你想关闭你的进程,你必须使用这个函数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
,因为它有自己的 window,我编写了 CloseMainWindow()
函数来关闭该程序。
因为 Cmd 是一个独立的进程,当您关闭启动它的程序时它不会关闭。
如果父进程崩溃(在 process.CloseMainWindow(); 之前),这个进程会保持 运行ning 吗?
问题的答案是:如果父进程在调用 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 Event,并调用外部进程对象的CloseMainWindow()函数。
我有一个简单而有趣的问题。
我需要从 C# 应用程序启动一个进程(node.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:\node\node.exe";**//Path to node installed folder****
string argument = "\ bundle\main.js";
p.StartInfo.Arguments = @argument;
p.Start();
我的问题是:如果父进程(C# 应用程序)崩溃,此进程会发生什么情况?子进程会 exit/crash 还是会保留 运行 因为它是一个完全独立的程序?
在它保持 运行 的情况下,有没有办法 "link" 这两个进程确保在父进程崩溃时子进程退出?
试过你的代码如下,如果你想关闭你的进程,你必须使用这个函数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
,因为它有自己的 window,我编写了 CloseMainWindow()
函数来关闭该程序。
因为 Cmd 是一个独立的进程,当您关闭启动它的程序时它不会关闭。
如果父进程崩溃(在 process.CloseMainWindow(); 之前),这个进程会保持 运行ning 吗?
问题的答案是:如果父进程在调用 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 Event,并调用外部进程对象的CloseMainWindow()函数。