Ha elindítjuk a Task Manager-t, akkor az alkalmazásaink neveit, és egyéb különböző adatait láthatjuk (1. ábra). Látjuk a neveket, a process ID-kat (PID), illetve még a szálak számát (Threads) is.
Készítsünk most egy olyan alkalmazást, amelynek segítségével ezeknek az adatoknak egy részét megjelenítjük, illetve el tudunk indítani (majd leállítani) mi is különböző process-eket.
Indítsuk el a Visual Studio-t és hozzunk létre egy új Console projektet (2. ábra). A projekt neve legyen : ConsoleSzalak.
2. ábra A projekt létrehozása
Ahhoz, hogy tudjunk a C# nyelvben process-ekkel dolgozni, szükségünk lesz a "System.Diagnostics" szerelvényre. Ezt vagy mi írjuk be ("using System.Diagnostics;") vagy pedig beírjuk a "Process"-t, majd a CTRL+. segítségével adjuk hozzá a szerelvényt a projektünkhöz (3. ábra).
3. ábra A System.Diagnostics szerelvény hozzáadása a projekthez
Ezután másojuk be a következő kódot a Program.cs file-ba.
class Program
{
static void Main(string[] args)
{
Process[] processek = Process.GetProcesses();
foreach (var item in processek)
{
Console.WriteLine("PID: {0}, \t Név: {1}, \t\t\t Szálak : {2}",
item.Id, item.ProcessName, item.Threads.Count);
}Console.ReadLine();
}
}
A "processek" nevű, Process típusú gyűjteménybe azok a processzek kerülnek, amelyek a GetProcess() metódus meghívásakor futnak. Ha később listáznánk ki ezt a gyűjteményt a foreach ciklus segítségével, akkor előfordulhat, hogy egy process már véget ért, viszont a "processek" gyűjteményben még ott van. Ekkor futási hiba (kivétel) keletkezik, tehát akkor javasolt a try-catch blokk használata. Mi ettől eltekintettünk.
Indítsuk el az alkalmazásunkat, a futási eredmény a 4. ábrán látható (A \t segítségével tudjuk formázni a megjelenítést.).
4. ábra A process ID-k, a nevek, illetve a szálak számai
Keressünk most rá egy adott nevű process-re. Ehhez a "GetProcessByName()" metódusra lesz szükségünk, amely szintén egy "Process" típusú gyűjteményt ad vissza, hiszen vannak olyan alkalmazások, amelyek ugyanolyan néven futnak, de más PID alatt.
A Main() metódusban lévő változtatást kiemeltük.
class Program
{
static void Main(string[] args)
{
Process[] processek = Process.GetProcessesByName("chrome");
foreach (var item in processek)
{
Console.WriteLine("PID: {0}, \t Név: {1}, \t\t\t Szálak : {2}",
item.Id, item.ProcessName, item.Threads.Count);
}Console.ReadLine();
}
}
Futtassuk újra a programunkat úgy, hogy a "chrome" alkalmazás adatai érdekelnek minket (5. ábra). Látható, hogy a "chrome"-nak különböző PID értékei vannak, tehát a "chrome" alkalmazásunk több process-t használ (és még több szálat....).
5. ábra Az összes "chrome" nevű alkalmazás főbb adatainak kilistázása
Keressünk rá most egy adott PID-del rendelkező process adataira. Ehhez a "GetProcessById()" metódusra lesz szükségünk. Ez a metódus a "Process" osztályból már nem gyűjteményt ad vissza, ezért a Main() metódusunkat jelentősen módosítottuk.
class Program
{
static void Main(string[] args)
{
Process process = Process.GetProcessById(7768);Console.WriteLine(process.BasePriority);
Console.WriteLine(process.MachineName);
Console.WriteLine(process.ProcessName);
Console.WriteLine(process.SessionId);
Console.WriteLine(process.UserProcessorTime);
Console.WriteLine(process.TotalProcessorTime);
Console.ReadLine();
}
}
A Main() metódusban kiírjuk a processünk prioritását, azt a gépnevet, ahol fut, a process nevét, a Session Id-ját és a különböző futási időket (6. ábra).
6. ábra Adott PID-del rendelkező process néhány adatának megjelenítése
Végül nézzük meg azt a lehetőséget, hogy hogyan lehet elindítani egy process-t, illetve leállítani. A könnyebb szemléltetés miatt, a létrehozandó process-ben elindítjuk a "notepad.exe"-t, amelyet 2 másodperc múlva leállítunk.
Másoljuk be a "Program.cs" file a következő kódot.
class Program
{
static void Main(string[] args)
{
Process p1 = Process.Start("notepad.exe");
Console.WriteLine("Indulás : \t{0} ",p1.StartTime);
Thread.Sleep(2000);
p1.Kill();
Console.WriteLine("Vége : \t\t{0} ", DateTime.Now);
Console.WriteLine("Prioritás : \t{0} ", p1.BasePriority);
Console.WriteLine("Process neve : \t{0} ", p1.ProcessName);
Console.WriteLine("PID : \t\t{0} ", p1.Id);
Console.ReadLine();
}
}
A Main() metódus első sorával elindítjuk a "notepad"-et egy külön process-ben. Ezután kiírjuk a process-ünk elindulási idejét.
Ezt követően várunk két másodpercet, majd a "Kill()" metódus segítségével leállítjuk a process-t, és a notepad alkalmazásunk is eltűnik (hiszen a process-e véget ért).
Noha a process véget ért, de az adatai elérhetők maradnak továbbra is a Main() metódusban. Kiírjuk még a process "kilővésének" idejét, prioritását, nevét, illetve a PID-et is (7. ábra).
7. ábra A notepad.exe-t elindító process adatai
Ebben a cikkben bemutatjuk a metódusok alapjait. Nem érintjük viszont például a túlterhelést, ezt egy következő részben tekintjük át.. . . .
Ebben a cikkben megismerjük a C# nyelv által használt változók nagy részét. Nézünk egy példát a típuskonverzióra.. . . .
A sorozatunknak ebben a részében átnézzük általánosságban az osztályok alapjait egy konzolalkalmazás segítségével. A konstruktorok viszont a következő részben kerülnek bemutatásra.. . . .