نظرة عامة
في نظام لينكس، كل برنامج أو خدمة تعمل كـ "عملية" (process). فهم كيفية إدارة هذه العمليات أمر بالغ الأهمية لمراقبة أداء النظام وحل المشكلات. ستتعلم في هذه الوحدة كيفية عرض العمليات، وفهم علاقاتها، وكيفية إيقافها.
ملاحظة: في أمثلة الأوامر أدناه، يشير الرمز $ إلى موجه الأوامر (prompt) ولا يجب كتابته عند تنفيذ الأوامر.
تحذير: كن حذرًا عند إنهاء العمليات، خاصة تلك التي تحمل PID منخفض (عمليات النظام)، فقد يؤدي ذلك إلى عدم استقرار النظام.
فهم العمليات في لينكس
في نظام لينكس، كل عملية تمتلك الخصائص التالية:
معلومات العملية:
- PID (Process ID): رقم فريد يحدد كل عملية
- PPID (Parent Process ID): رقم العملية الأب
- UID (User ID): معرف المستخدم الذي بدأ العملية
- GID (Group ID): معرف المجموعة المالكة للعملية
- الحالة: حالة العملية (قيد التشغيل، متوقفة، etc.)
أنواع العمليات:
- عمليات النظام: عمليات تبدأ مع تشغيل النظام
- عمليات المستخدم: عمليات يبدأها المستخدمون
- عمليات الخلفية: عمليات تعمل في الخلفية
- عمليات الواجهة: عمليات مرتبطة بواجهة المستخدم
هيكل شجرة العمليات:
systemd(1)─┬─systemd-journal(256)─┬─{sd-journal}(257)
├─systemd-udevd(300)───{systemd-udevd}(301)
├─sshd(500)───sshd(600)───bash(601)───vim(602)
└─cron(700)───cron(701)───sh(702)───backup.sh(703)
كل عملية في لينكس تنحدر من العملية الأولى systemd (أو init في الأنظمة القديمة) وتشكل هيكلاً شجرياً.
عرض العمليات: ps
يستخدم لعرض قائمة بالعمليات الجارية حاليًا في النظام.
user@server:~$
ps
PID TTY TIME CMD
601 pts/0 00:00:00 bash
802 pts/0 00:00:00 ps
user@server:~$
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169284 9264 ? Ss 09:15 0:02 /sbin/init
root 256 0.0 0.1 191728 5584 ? Ss 09:15 0:00 /lib/systemd/systemd-journald
user 601 0.0 0.2 29092 9880 pts/0 Ss 09:20 0:00 -bash
user 803 0.0 0.1 37316 3308 pts/0 R+ 10:30 0:00 ps aux
شرح الأمر:
يعرض ps لقطة للعمليات النشطة في لحظة تنفيذ الأمر. الخيارات الشائعة:
- a: عرض عمليات جميع المستخدمين
- u: عرض معلومات مفصلة (المستخدم، استخدام CPU والذاكرة)
- x: عرض العمليات التي لا تمتلك طرفية تحكم (TTY)
- e: عرض بيئة العملية
- f: عرض بتنسيق شجري
أمثلة أخرى:
ps -ef
ps -u username
ps -C firefox
ps --forest
مراقبة العمليات: top
يعرض العمليات في الوقت الحقيقي مع تحديث مستمر، مفيد لمراقبة استهلاك الموارد.
user@server:~$
top
top - 10:35:15 up 1:20, 1 user, load average: 0.05, 0.10, 0.15
Tasks: 120 total, 1 running, 79 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.5 us, 0.5 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1986.8 total, 245.2 free, 987.6 used, 754.0 buff/cache
MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 1701.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
601 user 20 0 29092 9880 5480 S 0.0 0.5 0:00.05 bash
1 root 20 0 169284 9264 6704 S 0.0 0.5 0:02.15 systemd
256 root 20 0 191728 5584 4480 S 0.0 0.3 0:00.07 systemd-journal
شرح الأمر:
يوفر top عرضًا تفاعليًا للعمليات في الوقت الحقيقي مع معلومات عن استخدام الموارد. بعض الأوامر داخل top:
- P: ترتيب حسب استخدام CPU
- M: ترتيب حسب استخدام الذاكرة
- N: ترتيب حسب PID
- k: إنهاء عملية (سيطلب PID)
- r: تغيير أولوية عملية (nice value)
- h: عرض المساعدة
- q: الخروج من top
أمثلة أخرى:
top -u username
top -p 123,456,789
top -d 5
ملاحظة: htop هو بديل محسن لـ top مع واجهة أكثر تفاعلية وألوان، لكنه غير مثبت افتراضيًا في معظم التوزيعات.
عرض شجرة العمليات: pstree
يعرض العمليات في هيكل شجري، مما يوضح علاقة الأبوة والبنوتة بين العمليات.
user@server:~$
pstree
systemd─┬─systemd-journal
├─systemd-udevd
├─sshd───sshd───bash───pstree
└─cron───cron───sh───backup.sh
user@server:~$
pstree -p
systemd(1)─┬─systemd-journal(256)
├─systemd-udevd(300)
├─sshd(500)───sshd(600)───bash(601)───pstree(804)
└─cron(700)───cron(701)───sh(702)───backup.sh(703)
شرح الأمر:
يعرض pstree العمليات في شكل شجري يوضح العلاقات بينها. بعض الخيارات المفيدة:
- -p: عرض أرقام PID مع أسماء العمليات
- -u: عرض اسم المستخدم عند تغييره بين العمليات
- -a: عرض وسيطات الأوامر
- -h: تمييز العملية الحالية وأسلافها
- -n: ترتيب العمليات numerically بدلاً من أبجديًا
أمثلة أخرى:
pstree -p 1234
pstree -a
pstree -u
الملفات المفتوحة: lsof
يسرد جميع الملفات المفتوحة والعمليات التي تستخدمها.
user@server:~$
lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 2 /
systemd 1 root rtd DIR 253,0 4096 2 /
systemd 1 root txt REG 253,0 1611768 1310797 /lib/systemd/systemd
systemd 1 root mem REG 253,0 18976 1447364 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
bash 601 user cwd DIR 253,0 4096 1572867 /home/user
bash 601 user rtd DIR 253,0 4096 2 /
bash 601 user txt REG 253,0 1113504 1448078 /usr/bin/bash
شرح الأمر:
يعرض lsof قائمة بجميع الملفات المفتوحة من قبل العمليات النشطة. هذا مفيد لتحديد:
- أي عملية تستخدم ملفًا معينًا
- أي ملفات مفتوحة من قبل عملية معينة
- الاتصالات الشبكية النشطة
- العمليات التي تستخدم مكتبة معينة
أمثلة أخرى:
lsof -i
lsof -p 1234
lsof -u username
lsof /path/to/file
lsof -i :80
ملاحظة: lsof قد لا يكون مثبتًا افتراضيًا في بعض التوزيعات. يمكن تثبيته عبر مدير الحزم (مثل sudo apt install lsof في أوبونتو).
إنهاء العمليات: kill
لإرسال إشارة لإنهاء عملية معينة باستخدام رقم تعريف العملية (PID).
user@server:~$
kill 1234
user@server:~$
kill -9 1234
user@server:~$
kill -HUP 1234
شرح الأمر:
يرسل kill إشارة إلى عملية محددة. بعض الإشارات الشائعة:
- TERM (15): إنهاء لطيف (الافتراضي) - تطلب من العملية إنهاء نفسها
- KILL (9): إنهاء قسري - تقتل العملية فورًا
- HUP (1): إعادة تحميل - تطلب من العملية إعادة تحميل إعداداتها
- INT (2): مقاطعة - مثل الضغط على Ctrl+C
- STOP (19): إيقاف مؤقت للعملية
- CONT (18): استئناف عملية متوقفة
أمثلة أخرى:
kill -l
kill -TERM 1234
kill -STOP 1234
kill -CONT 1234
تحذير: استخدام kill -9 يجب أن يكون الملاذ الأخير فقط، لأنه لا يمنح العملية فرصة لتنظيف الموارد قبل إنهائها.
إنهاء العمليات بالاسم: killall
لإنهاء جميع العمليات التي تحمل اسمًا معينًا.
user@server:~$
killall firefox
user@server:~$
killall -9 apache2
user@server:~$
killall -u username processname
شرح الأمر:
يرسل killall إشارة إلى جميع العمليات التي تطابق الاسم المحدد. هذا مفيد عندما تريد إنهاء جميع نسخ عملية معينة.
أمثلة أخرى:
killall -i firefox
killall -v apache2
killall -r '^python.*'
تحذير: كن حذرًا عند استخدام killall مع أسماء عمليات شائعة، فقد تقوم بإنهاء عمليات مهمة عن طريق الخطأ.
البحث عن PID: pidof
للعثور على رقم تعريف العملية (PID) لبرنامج معين.
user@server:~$
pidof sshd
500 600
user@server:~$
pidof -s bash
601
شرح الأمر:
يعرض pidof أرقام PID للعمليات التي تطابق الاسم المحدد. بعض الخيارات المفيدة:
- -s: إرجاع PID واحد فقط (المطابقة الأولى)
- -x: تضمين البرامج النصية التي تطابق الاسم
- -o: استبعاد عمليات معينة (مثل PID الخاص بpidof نفسه)
أمثلة أخرى:
pidof -o %PPID bash
pidof -x script.sh
إدارة الوظائف: bg و fg
لإدارة العمليات في الخلفية والمقدمة.
user@server:~$
sleep 100
[1]+ Stopped sleep 100
user@server:~$
bg
[1]+ sleep 100 &
user@server:~$
fg
sleep 100
شرح الأوامر:
- Ctrl+Z: إيقاف العملية الحالية مؤقتًا وإعادتها إلى الخلفية
- bg: استئناف العملية المتوقفة في الخلفية
- fg: إحضار العملية من الخلفية إلى المقدمة
- &: تشغيل العملية في الخلفية منذ البداية (مثال:
sleep 100 &)
- jobs: عرض قائمة الوظائف في الجلسة الحالية
أمثلة أخرى:
sleep 100 &
jobs
fg %1
bg %2
تمرين عملي: إدارة العمليات
لنفترض أنك بحاجة إلى إدارة عمليات نظام تعمل بشكل غير طبيعي:
التمرين 1: البحث وإنهاء عملية
ابحث عن جميع عمليات Apache وأوقفها بشكل لطيف.
الحل:
pidof apache2
pgrep apache2
sudo kill $(pidof apache2)
sudo killall apache2
التمرين 2: مراقبة استخدام الموارد
ابحث عن العمليات التي تستهلك أكبر قدر من الذاكرة وCPU.
الحل:
top
ps aux --sort=-%mem | head -5
ps aux --sort=-%cpu | head -5
التمرين 3: التحقق من الملفات المفتوحة
اكتشف أي عملية تمنعك من حذف ملف معين.
الحل:
lsof /path/to/file
sudo kill -9 $(lsof -t /path/to/file)
أفضل الممارسات لإدارة العمليات
استخدم الإشارات المناسبة: ابدأ دائمًا بـ kill بدون إشارة أو بـ TERM قبل استخدام KILL.
تحقق مرتين: تأكد من PID الصحيح قبل إنهاء أي عملية، خاصة تلك التي تحمل أرقامًا منخفضة.
استخدم lsof للاستكشاف: عند مواجهة مشاكل في الملفات أو الشبكات، استخدم lsof للتحقق من العمليات النشطة.
مراقبة مستمرة: استخدم top أو htop لمراقبة استخدام الموارد وتحديد المشاكل مبكرًا.
إشارات Linux الشائعة:
| الإشارة |
الرقم |
الوصف |
الاستخدام |
| SIGHUP |
1 |
إنهاء الجلسة |
إعادة تحميل التconfig للعمليات |
| SIGINT |
2 |
مقاطعة |
مثل Ctrl+C |
| SIGQUIT |
3 |
إنهاء مع core dump |
مثل Ctrl+\ |
| SIGKILL |
9 |
إنهاء فوري |
إيقاف قسري لا يمكن تجاهله |
| SIGTERM |
15 |
إنهاء لطيف |
الإنهاء الافتراضي |
| SIGSTOP |
19 |
إيقاف مؤقت |
إيقاف عملية (لا يمكن تجاهله) |
| SIGCONT |
18 |
استئناف |
استئناف عملية متوقفة |