جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
معمل نظم التشغيل - الأسبوع الخامس
C#تشغيل العمليات الخارجية وفحصها والتحكم فيها باستخدام System.Diagnostics
PID)System.DiagnosticsProcess.Start(fileName) عملية جديدة بسطر كود واحدProcess.Start(fileName, arguments) عملية ويفتح ملفا معينا أو يمرر وسيطاتusing System.Diagnostics;
Process.Start("xed"); // launch a program
Process.Start("xed", "example.txt"); // launch and open a file| الخاصية | الوصف |
|---|---|
ProcessName | اسم العملية، مثل "notepad" |
Id | معرف العملية الفريد (PID) |
StartTime | تاريخ ووقت بدء العملية |
HasExited | ما إذا كانت العملية لا تزال تعمل |
WorkingSet64 | استخدام الذاكرة بالبايت |
Process process = Process.Start("xed");
Console.WriteLine($"{process.ProcessName} (PID: {process.Id})");طرق البحث عن العملية
GetProcesses()
كل عملية على النظام
GetCurrentProcess()
عملية تطبيقك الحالي
GetProcessesByName(name)
العمليات المطابقة لاسم معين
GetProcessById(pid)
عملية محددة عبر PID
Process[] chromeProcesses = Process.GetProcessesByName("chrome");
Process me = Process.GetCurrentProcess();WaitForExitprocess.WaitForExit() الكود المستدعي حتى تغلق العملية، دون حد زمنيprocess.WaitForExit(5000) 5000 ميلي ثانية كحد أقصى، وتعيد قيمة منطقية تشير إلى ما إذا انتهت في الوقت المحددProcess process = Process.Start("xed");
bool exited = process.WaitForExit(5000);
Console.WriteLine(exited ? "Exited in time" : "Still running");Kill مقابل CloseKill() | Close() | |
|---|---|---|
| التأثير | ينهي العملية فورا، دون منحها فرصة للتنظيف | يحرر تتبع تطبيقك للعملية فقط |
| حالة العملية بعدها | منتهية | تظل تعمل |
process.Kill();
process.WaitForExit(); // confirm it terminated
process.Close(); // stop tracking; process keeps runningProcessStartInfo: تحكم دقيقProcessStartInfo بدقة كيفية بدء العملية، بما يتجاوز استدعاء Process.Start البسيطFileName، Arguments، WorkingDirectory، WindowStyle، CreateNoWindowRedirectStandardOutput، RedirectStandardInput، RedirectStandardErrorvar startInfo = new ProcessStartInfo
{
FileName = "xed",
Arguments = "example.txt",
WindowStyle = ProcessWindowStyle.Maximized
};
Process.Start(startInfo);UseShellExecuteUseShellExecute = true (الافتراضي) | UseShellExecute = false | |
|---|---|---|
| فتح الروابط والمستندات | نعم، ببرنامجها الافتراضي | لا |
| إعادة توجيه الإدخال/الإخراج | لا | نعم |
UseShellExecute = false وRedirectStandardOutput = trueprocess.StandardOutput.ReadToEnd()WaitForExit()var startInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = "-c \"date\"",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
Process process = Process.Start(startInfo);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();RuntimeInformation.IsOSPlatform() من System.Runtime.InteropServices نظام التشغيل الحالي وقت التشغيل| Windows | Linux | |
|---|---|---|
| المحرر/الصدفة | notepad.exe، cmd.exe مع /c | xed/nano/vim، /bin/bash مع -c |
using System.Runtime.InteropServices;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Console.WriteLine("Running on Linux");
}PID) وذاكرة وموارد خاصة بهاProcess.Start، GetProcesses، GetCurrentProcess، GetProcessesByName، GetProcessById بدء العمليات واكتشافهاWaitForExit() الاكتمال؛ وتنهي Kill() بالقوة؛ وتوقف Close() التتبع فقطProcessStartInfo تحكما دقيقا، ويعد UseShellExecute المفتاح الفاصل بين التكامل مع الصدفة وإعادة توجيه الإدخال/الإخراجUseShellExecute = false مع RedirectStandardOutput = trueRuntimeInformation.IsOSPlatform ويتفرع حسب المنصةMahmoud Abas|معمل أنظمة التشغيل - الأسبوع 5: إدارة الـ Processes في C#