当父进程死亡时杀死子进程

本文关键字:子进程 进程 | 更新日期: 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
}

您可以将您的进程存储在列表中。每次创建一个时,都将其添加到列表中。然后在主进程关闭时,你只需要一个接一个地停止它们。是吗?