我是一名高中生,所以我正在为最近的网络安全竞赛做准备。我编写了一个程序,该程序可以不断检测并终止该进程,但是我不知道出了什么问题。它会运行一会儿,然后退出。我该如何解决?
源代码↓
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.
请按任意键继续. . .
它正常运行一会儿,杀死一些进程,然后退出。 这是怎么回事?
无论如何,谢谢那些给我建议的人,希望您过得愉快。
答案 0 :(得分:-2)
如果我正在编写一个应用来执行您正在做的事情,那么我可能会考虑以这种方式编写它:
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.");
}
}
}
像这样的杀死进程不是一个好主意。