我正在使用System.Diagnostics.Process我的应用程序中的类创建新进程.
当/如果我的应用程序崩溃了,我希望这个进程被杀死.但是如果我从任务管理器中删除我的应用程序,子进程就不会被杀死.
有没有办法让子进程依赖于父进程?
我以编程方式启动Internet Explorer,代码如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "http://www.google.com";
Process ieProcess = Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)
这将生成Windows任务管理器中可见的2个进程.然后,我尝试用以下方法终止进程:
ieProcess.Kill();
Run Code Online (Sandbox Code Playgroud)
这导致任务管理器中的一个进程被关闭,另一个进程仍然存在.我尝试检查任何具有子进程的属性,但没有找到.我怎么能杀死其他进程呢?更一般地说,如何杀死与Process.Start开始的进程相关的所有进程?
我有以下功能:
private void TakeOverAllScreens()
{
int i = 0;
foreach (Screen s in Screen.AllScreens)
{
if (s != Screen.PrimaryScreen)
{
i++;
Process.Start(Application.ExecutablePath, "Screen|" + s.Bounds.X + "|" + s.Bounds.Y + "|" + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它为PC上的每个屏幕创建了一个单独的应用程序实例.
如何创建一个关闭所有这些函数的退出函数?该函数需要在应用程序的任何实例上工作,而不仅仅是我的"主"实例.
我需要编写一个类,它将附加到某些Windows进程,监视和限制其CPU使用率.流程优先级的改变对我没有帮助,所以我真的需要编写一个与BES或ThreadMaster基本类似的程序.所以我需要创建一个类似这样的类(伪代码):
public void cpuLimiter(pid)
{
ProcessHandle handle = attachToProcess(pid);
while (cpuLimiting)
{
if (handle.cpuUsage > 30%)
{
handle.sleep(100miliseconds);
}
sleep(10miliseconds);
}
closeHandle(pid);
}
Run Code Online (Sandbox Code Playgroud)
我希望我说清楚我想要完成什么,只是我不知道如何.感谢每一位帮助.