今天我们来讲一个c#很基础的一个知识点—进程,我们知道每个Win32程序都会被分配到一个或多个进程里面,进程之间是相互独立的,一个进程出现问题停止工作并不会影响其它的进程。那我们怎样用C#来获取当前运行的所有进程呢?我们来看看下面这段代码
Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
{
Console.WriteLine("{0},{1}", p.ProcessName, p.Id);
}
如图所示,我们得到当前运行的进程并打印出了进程名称和进程唯一ID。每个程序都有一个主进程,进程里面包含的是线程,我们现在想得到QQ这个进程里面运行了哪些线程,以及它是什么时候开始运行的,代码该怎么写呢?这个很简单,以QQ为例,我们来看看下面这段代码
Process pd = Process.GetProcessById(22976);
ProcessThreadCollection ptc = pd.Threads;
foreach (ProcessThread pt in ptc)
{
Console.WriteLine("{0}---{1}", pt.StartTime, pt.Id);
}
如图所示,QQ进程内包含的线程还挺多的,线程信息除了启动时间以外还包含线程id等信息。除了查看进程内的线程信息以外,c#中是可以对进程进行开关控制的,具体来看看下面两段代码
根据线程名字杀死指定线程
//根据线程名字杀死指定线程
Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
{
if (p.ProcessName == "QQ")
{
p.Kill();
}
}
根据程序路径启动指定程序
//根据程序路径启动指定程序
ProcessStartInfo psi = new ProcessStartInfo("QQ.exe");
psi.FileName = @"C:\Program Files\Tencent\QQ\Bin\QQ.exe";
Process.Start(psi);