当父进程死亡时杀死子进程
本文关键字:子进程 进程 | 更新日期: 2023-09-27 18:14:30
我使用下面的代码创建了几个进程,我想在它们的父进程死亡时杀死它们。
Process p = new Process();
p.StartInfo.FileName = @"G:'test.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = true;
p.StartInfo.RedirectStandardOutput = false;
p.Start();
1-我搜索了很多,但不能找到一个解决方案。唯一有用的解决方案是:
解决方案但是这一行有错误Win32.CloseHandle(m_handle);
2-我正在使用。netframework 3.5,我不能使用任务。
3-我用p.WaitForExit();
,但我的主机冻结。
有没有办法在不冻结表单的情况下杀死父进程?
在应用程序结束时终止该进程。您可以注册Form.Closing
从您的主要形式的应用程序。
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Process [] localByName = Process.GetProcessesByName("yoursubprocess");
foreach (var process in processes)
{
process.Kill() ;
}
}
EDIT:
yoursubprocess:要终止的子进程名。非主进程
从子进程名来看,您似乎是它们的作者。然后,您可以使用任何形式的IPC来简单地告诉子进程"请关闭",而不是杀死进程。
最简单的例子// in main application
Mutex mutex = new Mutex(true, "MyMutexWithUniqueName");
... do job here
mutex.ReleaseMutex(); // on exit
// in children
Mutex mutex = Mutex.OpenExisting("MyMutexWithUniqueName");
if(mutex.WaitOne(0)) // poll
{
mutex.ReleaseMutex();
... exit process
}
您可以将您的进程存储在列表中。每次创建一个时,都将其添加到列表中。然后在主进程关闭时,你只需要一个接一个地停止它们。是吗?