الفصل 4.6 - الوظائف والمهام في الخلفية
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- بدء العمليات في الخلفية
- إدارة الوظائف باستخدام jobs، fg، bg
- استخدام nohup للعمليات المستمرة
- فهم screen و tmux
- إدارة العمليات بعد تسجيل الخروج
العمليات في الخلفية
البدء باستخدام &
# عملية في الخلفية
commande &
# مثال
sleep 60 &
tail -f /var/log/app.log &
# رؤية PID
echo $! # PID لآخر عملية في الخلفية
إعادة التوجيه
# إعادة توجيه الخرج
commande > output.log 2>&1 &
# تجاهل الخرج
commande > /dev/null 2>&1 &
# مثال
long_script.sh > script.log 2>&1 &
إدارة الوظائف
jobs - رؤية الوظائف
# قائمة الوظائف
jobs
# مع PIDs
jobs -l
# الوظائف المنتهية أيضًا
jobs -a
# الصيغة:
# [1] + running sleep 60 &
# [2] - running tail -f log &
# الرقم، الحالة، الأمر
fg - في المقدمة
# آخر وظيفة في المقدمة
fg
# وظيفة محددة
fg %1
fg %2
fg %nom
# باستخدام Ctrl+Z، يتم تعليق العملية
# ثم fg يعيدها إلى المقدمة
bg - في الخلفية
# آخر وظيفة معلقة في الخلفية
bg
# وظيفة محددة
bg %1
bg %2
nohup - تجاهل SIGHUP
المشكلة
عند تسجيل الخروج، يرسل shell إشارة SIGHUP إلى جميع العمليات التابعة له، مما يؤدي إلى قتلها.
الحل: nohup
# تجاهل SIGHUP
nohup commande &
# مع إعادة التوجيه
nohup commande > output.log 2>&1 &
# يتم إنشاء ملف nohup.out تلقائيًا
# إذا لم يكن هناك إعادة توجيه
الخصائص:
- تستمر العملية بعد تسجيل الخروج
- الخرج في
nohup.out(افتراضيًا) - يمكن إعادة توجيهه
screen - الجلسات المستمرة
التثبيت
sudo apt install screen # Ubuntu/Debian
sudo yum install screen # Red Hat/CentOS
الاستخدام الأساسي
# بدء جلسة
screen
screen -S nom_session # مع اسم
# فصل: Ctrl+A ثم D
# إعادة الاتصال: screen -r
# إعادة الاتصال بجلسة مسماة: screen -r nom_session
# قائمة الجلسات
screen -ls
# قتل الجلسة
screen -X -S nom_session quit
أوامر screen (Ctrl+A)
Ctrl+A ثم:
d # فصل
c # نافذة جديدة
n # النافذة التالية
p # النافذة السابقة
" # قائمة النوافذ
? # مساعدة
tmux - موازن طرفية حديث
التثبيت
sudo apt install tmux # Ubuntu/Debian
sudo yum install tmux # Red Hat/CentOS
الاستخدام الأساسي
# بدء جلسة
tmux
tmux new -s nom_session
# فصل: Ctrl+B ثم D
# إعادة الاتصال: tmux attach
# إعادة الاتصال بجلسة: tmux attach -t nom_session
# قائمة الجلسات
tmux ls
# قتل الجلسة
tmux kill-session -t nom_session
أوامر tmux (Ctrl+B)
Ctrl+B ثم:
d # فصل
c # نافذة جديدة
n # النافذة التالية
p # النافذة السابقة
% # تقسيم عمودي
" # تقسيم أفقي
? # مساعدة
المقارنة
| الأداة | الاستخدام | المزايا |
|---|---|---|
& | خلفية بسيطة | بسيط، سريع |
nohup | عمليات مستمرة | يستمر بعد تسجيل الخروج |
screen | جلسات طرفية | نوافذ متعددة، قابل للفصل |
tmux | طرفية حديثة | ميزات أكثر من screen |
أمثلة عملية
السيناريو 1: سكريبت طويل
# بدء في الخلفية باستخدام nohup
nohup long_script.sh > script.log 2>&1 &
# تسجيل الخروج
# يستمر السكريبت
السيناريو 2: جلسة عمل
# بدء screen
screen -S travail
# تشغيل عدة أوامر
# فصل: Ctrl+A D
# إعادة الاتصال لاحقًا
screen -r travail
السيناريو 3: مراقبة مستمرة
# في screen/tmux
watch -n 1 'ps aux --sort=-%cpu | head'
# فصل وإعادة الاتصال عند الحاجة
ملخص
في هذا الفصل، تعلمت:
الخلفية: commande & لبدء في الخلفية
الوظائف: jobs، fg، bg لإدارة الوظائف
nohup: تجاهل SIGHUP، عمليات مستمرة
screen: جلسات طرفية قابلة للفصل
tmux: موازن طرفية حديث
عملي: اختر حسب الاحتياجات (بسيط مقابل جلسات)
الخطوات التالية
الوحدة 5: المستخدمون والأذونات
الوحدة 6: سكريبتات shell
تم إنشاء الفصل في: ديسمبر 2024