我有一个简单而有趣的问题。
我需要从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#应用程序)崩溃,该进程会发生什么?孩子会处理退出/崩溃,还是会继续运行,因为它是一个完全独立的程序?
在它继续运行的情况下,是否有办法链接"如果父母崩溃,那两个进程是为了确保孩子退出?
答案 0 :(得分:0)
尝试使用如下代码,如果你想关闭你的过程,你必须使用这个函数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是单独的进程,当你关闭启动它的程序时它不会关闭。
如果父进程崩溃(在process.CloseMainWindow();之前),此进程会继续运行吗?
回答问题是:如果父母在调用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()函数。