当父母去世时杀死子进程

时间:2014-07-24 13:22:23

标签: c# windows-7 process

我正在使用代码bellow创建几个进程,并且我希望在父级死亡时将它们全部删除。

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-我搜索了很多,但无法找到解决方案。 唯一有用的解决方案是:

Solution

但我在这一行Win32.CloseHandle(m_handle);

上有错误

2-我正在使用.netframework 3.5,我无法使用任务。

3-我使用了p.WaitForExit();但我的主要形态已冻结。

有没有办法在不冻结表单的情况下终止父模具上的进程?

3 个答案:

答案 0 :(得分:1)

当应用程序结束时,请终止该过程。您可以在主表单应用程序中注册Form.Closing

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    Process [] localByName = Process.GetProcessesByName("yoursubprocess");
    foreach (var process in processes) 
    {
        process.Kill() ; 
    }
}

编辑

yoursubprocess :要杀死的子进程名称。不是主要过程

答案 1 :(得分:1)

从子进程名称看起来您就是他们的作者。然后,您可以使用任何形式的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
}

答案 2 :(得分:0)

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