我是一名高中生,然后我正在为网络安全竞赛做准备。我写了一个不断检测并杀死过程的程序,但我不知道出了什么问题。它运行良好一段时间,然后退出。我该如何修复?
源代码↓
using System;
using System.Collections;
using System.Diagnostics;
namespace defense
{
class Program
{
static void Main(string[] args)
{
ArrayList white_list = Get_process();
try
{
while (true)
{
ArrayList bad_list = Get_process();
foreach (int pid in bad_list)
{
if (!white_list.Contains(pid))
{
Process.GetProcessById(pid).Kill();
Console.WriteLine($"process {pid} dead.");
}
}
}
}
catch (Exception)
{
}
}
static ArrayList Get_process()
{
Process[] pss = Process.GetProcesses();
ArrayList list = new ArrayList();
foreach (Process ps in pss)
{
list.Add(ps.Id);
}
return list;
}
}
}
当我运行它并打开几个程序时:
process 10776 dead.
process 11580 dead.
process 12152 dead.
process 10660 dead.
请按任意键继续. . .
它正常运行一段时间,杀死一些过程,然后退出。这里发生了什么?
无论如何,感谢那些给我建议的人,希望您有美好的一天。
如果我正在写一个应用程序来做您正在做的事情,我可能会考虑这样写:
static async Task Main(string[] args)
{
List<int> good = Process.GetProcesses().Select(x => x.Id).ToList();
while (true)
{
await Task.Delay(TimeSpan.FromSeconds(1.0));
List<int> bad = Process.GetProcesses().Select(x => x.Id).ToList();
foreach (int pid in bad.Except(good))
{
Process.GetProcessById(pid).Kill();
Console.WriteLine($"process {pid} dead.");
}
}
}
杀死这样的过程是一个坏主意。