我该如何解决终止进程的错误?

时间:2019-05-10 02:58:20

标签: c#

我是一名高中生,所以我正在为最近的网络安全竞赛做准备。我编写了一个程序,该程序可以不断检测并终止该进程,但是我不知道出了什么问题。它会运行一会儿,然后退出。我该如何解决?

源代码↓

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.
请按任意键继续. . .

它正常运行一会儿,杀死一些进程,然后退出。 这是怎么回事?

无论如何,谢谢那些给我建议的人,希望您过得愉快。

1 个答案:

答案 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.");
        }
    }
}

像这样的杀死进程不是一个好主意。