المهمات Processes
من أين نبدأ ؟
دايما كده كل مواضيع الدليل ده كبيرة كده ومتخلصش في مقالة واحدة ... لكن مع الوقت الموضوع بإذن الله هيتلم .... يارب
ايه موضوع المهمات ده ؟
كلمة مهمة Process في أبسط معانيها وبدون حوارات برنامج شغال دلوقتي بيستخدم بعض موارد الجهاز من رامات أو معالجة ويمكن بيكلم وحدة اخراج/ادخال ... وبالتالي فأي برنامج شغال كده بيعتبر بالنسبة لنظام التشغيل مهمة Process
بعد عملية البوت للجهاز وتسليم كل موارده لنظام التشغيل Boot ... بيبدأ نظام اللينكس في تشغيل أول مهمة بتشتغل خالص واسمها init وبتاخد رقم واحد 1 فيما يعرف برقم المهمة PID=Process ID ... تمام زي أرقام المستخدمين والمجموعات UID & GID
وبالتالي هتعتبر المهمة init دية أب لكل المهمات اللي هتقوم بعد كده لغاية لما تقفل الجهاز خالص ... بسيطة بس ايه موضوع اﻷب ده ...
ممكن دلوقتي ومن غير تفاصيل نقتنع إن علاقة كل المهمات داخل نظام تشغيل اليونكس هي علاقة أب وابن ... بحيث إن كل أمر مثلا بيتكتب على سطر اﻷوامر هو أبن لمهمة الباش أﻷساسية ... وفي المثال ده هتكون الباش هي PPID=Parent PID
يعني اﻷب للمهمة اللي شغالة دلوقتي .... وكده المهمة init هي أب لجميع المهمات بصورة مطلقة ﻷنها أول مهمة اشتغلت وهكذا ... طبعا لو عايز تفاصيل أكتر يمكنك مراجعة System
Calls أو Library Calls اللي اسمهم Fork and exec
ولو عايز تشوف كل العلاقات ما بين المهمات اللي شغالة دلوقتي على جهازك جرب أمر pstree
فين هي المهمات اللي شغالة دلوقتي ؟
عدنا .....دلوقتي لما كنت بتحتاج تشوف البرامج اللي شغالة في اللحظة دية على ماكينة ويندوز ... كنت بتعمل CTRL+ALT+DEL فتلاقى نافذة بيسموها Task Manager فيها كل البرامج اللي شغالة مع معلومات تانية
طبعا بالنسبة للينكس أغلب الواجهات الرسومية بتسمح بتجميعة اﻷزرار دية بنفس الوظيفة تلاشيا ﻷى توهان ... كمثال KDE ...
ولكن بالنسبة لسطر اﻷوامر لو عايز تعرف المهمات اللي شغالة ورقم PID ﻷي مهمة محتاج أمر ps
اﻷمر ps وخياراته :
دلوقتي يهمنا الخانة اﻷولى وهي رقم المهمة PID والخانة اﻷخيرة هي اﻷمر اللي بيتنفذ CMD
بالنسبة للخيار T أو خيار آخر سيستخدم اﻵن يمكن متابعة المزيد من خلال اﻷمرين
عودة للخيار T فهو يوضح جميع المهمات الخاصة بسطر اﻷوامر الحالي - تقبل هذا التوصيف مؤقتا - ولكن اﻷهم اﻵن أن هذا الخيار أضاف خانة أخرى توضح حالة المهمة ... أي أن المهمة ليست مفعلة أو غير مفعلة فقط وانما يوجد العديد من الحالات المختلفة للمهمات
المعنى الحالة
D Uninterruptible sleep, usually IO
المهمة معطلة في انتظار وحدة اخراج أو ادخال
R Running or runnable ,on run queue
المهمة اﻵن في حالتها المفعلة --- شغالة ---
S Interruptible sleep waiting for an event to complete
المهمة في حالة خمول تام لمدة معينة عامة 20 ثانية في انتظار شئ بيخلص
T Stopped, or because it is being traced
المهمة موقوفة عن العمل
Z Defunct ("zombie") process
المهمة موقوفة تماما ولا تنتظر شئ أصلا
الخياران l أو u يعطيان كل المعلومات الخاصة بمستخدم معينة من رقم المهمة و أولوية تنفيذ المهمة ومعدل استهلاكها لوحدة المعالجةCPU وللذاكرة اﻷساسية Main Memeoryوللذاكرة اﻷفتراضية Swapping or Paging وحالة المهمة وهكذا دواليك
الخيار ax
هما خياران مشهوران جدا مع اﻷمر ps الخيار a يعني كل المهمات الخاصة بالنظام وجميع المستخدمين والخيار x بيعطى معلومات عن المهمة دون تفاصيل سطر اﻷوامرcontrolling Terminal الخاص بها
اغلب هذه المهمات في مقام ما يسمى daemons بترجمة مبتذلة ممكن نقول عفاريت أو أشباح ... بمعنى إنها مهمات صاحية علطول مبتموتش إلا لما يكون في أمر خاص بذلك ... وطول وقت تشغيلها بتحاول تتابع أحداث نعينة وبتصرف بناء على ذلك بردود فعل مقابلة ... ومنها ما ينفذ روتينات متكررة على مدار أزمنة متفاوتة وهكذا
دايما أمر مخرجات اﻷمر ps ax بتتعالج بأوامر تانية كأن نعد عدد المهمات الخاصة بالنظام وجميع المستخدمين
أو كأن نبحث عن مهمة معينة باستخدام اﻷمر grep
معاملات المهمة Process Attributes :
يوجد بعض اﻷصدارات من النواة Kernel قادرة على تتبع أكثر من 85 معامل لكل مهمة ... كمثال خيارات اﻷمر اللي اشتغلت بيه المهمة ذات نفسها و الوقت اللي اشتغلت فيه و المتغيرات الخاصة بالمستخدم اللي شغل المهمة دية و الملفات المفتوحة من قبل المهمة دية والمجلد اللي شغالة فيه المهمة دية وسطر اﻷوامر اللي اشتغلت منه وهكذا دواليك
طبعا في ملحوظة جديرة بالذكر إن أغلب المعاملات دية بتتورث من المهمة اﻷب اللي من خلالها اشتغلت المهمة دية ... ويمكن بالمفهوم ده بدأت تظهر علاقة المهمة اﻷب PPID بالمهمة PID اللي بتشتغل في أي لحظة ... لكن طبعا مازال فيه تفاصيل تانية كتير مختفية ... تابع للمزيد من المعلومات عن هذه المعاملات man 1 ps وتحديدا من خلال القسم STANDARD FORMAT SPECIFIERS
وبهذا تستخدم ما تشاء من هذه المعاملات مع الخيار o
ايقاف المهمات :
طبعا المفتاح السحري لهذه الوظيفة هو CTRL+C ولكن بأبسطها كود سي C Code ممكن تلاشي تأثير حرف السي أو تجاهله ولذلك توجد أداة أنجع في التعامل مع هذا الموقف
أمر kill .. بمجرد التعامل مع أمر kill نجد أنفسنا نتعرض لمفهوم لطيف ألا وهو مفهوم Signals أو اﻷشارات ... بمعنى أبسط بيئة اليونكس توفر بيئة من اﻷتصالات ما بين المهمات وما بين النواة في أطار عدد معين من اﻷشارات Signals المعرفة داخل النظام ككل
هذه قائمة كاملة بكل اﻷشارات المتاحة بالنواة الخاصة بنظامك
أمر kill يتعامل مع مع رقم المهمة فقط بعد معرفته من خلال اﻷمر ps كمثال
طبعا أكيد حاجة عجيبة شوية إنك تمر بالدوامة دية عشان توقف مهمة شغالة ... خصوصا مع أضافة حالتك النفسية اللي بتتخلق ساعة لما يكون فيه برنامج قاتلك الجهاز أو برنامج مش راضي يستجيب معاك ...
عالعموم الطريق اللي ذكر ده هو الطريق الأسلم ... لكن فيه طرق بديلة قد تكون أنسب في حالة مختلفة
عندك أمر pgrep بيبحث في قائمة المهمات الشغالة بكل حالتها المسجلة في مجلد proc/ وبعدين يطلعلك البيانات اللي انت محتاجها طبعا أولهم رقم المهمة PID
وعندك أيضا اﻷمر pkill اللي بيعمل نفس وظيفة اﻷمر pgrep انه يبحث على كل المهمات اللي توافق كلمة البحث وزيادة على ذلك يرسل اشارة توقيف إلى هذه المهمات-SIGTERM Termination Signal
طبعا استشهادا بالمثال اللي ذكرناه في اننا بندور على مهمة init طلع لنا تلات نتايج على الرغم إنه فيه مهمة واحدة بس اللي اسمها init اللي رقمها 1 ... لكن ما هما المهمتان المتبقيتان ؟ بكل بساطة اﻷمر pgrep أو pkill قاعدين بيبحثوا عن كلمة البحث ويطلعوا كل المتطابق مع الكلمة دية وفي حالتنا هنا ده ميمنعش إنه يطلع نتيجة المهمة kdeinit أو init تانية .. وبالتالي بدأت تتضح خطورة اﻷمر ده في مطابقاته لحاجات احنا مش عايزنها أصلا ؟
طبعا الحل هنا في المشكلة دية اننا نستخدم Regular Expression يحددنا بالظبط آني كلمة احنا عايزنها أولها ايه وآخرها وفي حدود كام حرف وكل ده ينفع يتحدد بمعاملات pgrep ... لكن بالطبع لا يوجد مجال هنا للتفصيل في شرح أساسيات الRegular Expression
بس لو أفسح مجال لذكر آخر كلمة مفروض نستخدم اﻷوامر دية لما نبقى متأكدين هنوقف ايه بالظبط وعارفين ايه اللي هيتوقف
دايما كده كل مواضيع الدليل ده كبيرة كده ومتخلصش في مقالة واحدة ... لكن مع الوقت الموضوع بإذن الله هيتلم .... يارب
ايه موضوع المهمات ده ؟
كلمة مهمة Process في أبسط معانيها وبدون حوارات برنامج شغال دلوقتي بيستخدم بعض موارد الجهاز من رامات أو معالجة ويمكن بيكلم وحدة اخراج/ادخال ... وبالتالي فأي برنامج شغال كده بيعتبر بالنسبة لنظام التشغيل مهمة Process
بعد عملية البوت للجهاز وتسليم كل موارده لنظام التشغيل Boot ... بيبدأ نظام اللينكس في تشغيل أول مهمة بتشتغل خالص واسمها init وبتاخد رقم واحد 1 فيما يعرف برقم المهمة PID=Process ID ... تمام زي أرقام المستخدمين والمجموعات UID & GID
وبالتالي هتعتبر المهمة init دية أب لكل المهمات اللي هتقوم بعد كده لغاية لما تقفل الجهاز خالص ... بسيطة بس ايه موضوع اﻷب ده ...
ممكن دلوقتي ومن غير تفاصيل نقتنع إن علاقة كل المهمات داخل نظام تشغيل اليونكس هي علاقة أب وابن ... بحيث إن كل أمر مثلا بيتكتب على سطر اﻷوامر هو أبن لمهمة الباش أﻷساسية ... وفي المثال ده هتكون الباش هي PPID=Parent PID
يعني اﻷب للمهمة اللي شغالة دلوقتي .... وكده المهمة init هي أب لجميع المهمات بصورة مطلقة ﻷنها أول مهمة اشتغلت وهكذا ... طبعا لو عايز تفاصيل أكتر يمكنك مراجعة System
Calls أو Library Calls اللي اسمهم Fork and exec
andalusy@linux-box : ~$ man -f fork
andalusy@linux-box : ~$ man 3p exec
ولو عايز تشوف كل العلاقات ما بين المهمات اللي شغالة دلوقتي على جهازك جرب أمر pstree
andalusy@linux-box : ~$ pstree
init─┬─acpid
├─auditd───{auditd}
├─cron
├─cupsd
├─2*[dbus-daemon]
├─dcopserver
├─dhcpd
├─events/0
├─gconfd-2
├─hald───hald-runner─┬─hald-addon-acpi
│ ├─hald-addon-keyb
│ └─hald-addon-stor
├─kded
├─kdeinit─┬─firefox───firefox-bin─┬─netstat
│ │ └─8*[{firefox-bin}]
│ ├─kio_file
│ ├─klauncher
│ ├─2*[konqueror]
│ ├─konsole─┬─bash
│ │ └─bash───pstree
│ └─kwin
├─kdesktop
├─kdesud
├─kdm─┬─Xorg
│ └─kdm───startkde─┬─kwrapper
│ └─ssh-agent
├─khelper
├─kicker
├─klipper
├─klogd
├─kmix
├─knotify
├─ksmserver
├─ksoftirqd/0
├─kthread─┬─aio/0
│ ├─cqueue/0
│ ├─kacpid
│ ├─kauditd
│ ├─kblockd/0
│ ├─kgameportd
│ ├─khubd
│ ├─kjournald
│ ├─kpsmoused
│ ├─kseriod
│ ├─kswapd0
│ └─2*[pdflush]
├─kxkb
├─master─┬─pickup
│ └─qmgr
├─mdnsd
├─migration/0
├─6*[mingetty]
├─mount.ntfs-3g
├─named───3*[{named}]
├─nmbd
├─nscd───6*[{nscd}]
├─polkitd
├─portmap
├─powersaved
├─resmgrd
├─smbd───smbd
├─sshd
├─start_kdeinit
├─syslog-ng
├─udevd
└─xinetd
فين هي المهمات اللي شغالة دلوقتي ؟
عدنا .....دلوقتي لما كنت بتحتاج تشوف البرامج اللي شغالة في اللحظة دية على ماكينة ويندوز ... كنت بتعمل CTRL+ALT+DEL فتلاقى نافذة بيسموها Task Manager فيها كل البرامج اللي شغالة مع معلومات تانية
طبعا بالنسبة للينكس أغلب الواجهات الرسومية بتسمح بتجميعة اﻷزرار دية بنفس الوظيفة تلاشيا ﻷى توهان ... كمثال KDE ...
ولكن بالنسبة لسطر اﻷوامر لو عايز تعرف المهمات اللي شغالة ورقم PID ﻷي مهمة محتاج أمر ps
اﻷمر ps وخياراته :
andalusy@linux-box : ~$ ps
PID TTY TIME CMD
4167 pts/2 00:00:00 bash
4939 pts/2 00:00:00 ps
دلوقتي يهمنا الخانة اﻷولى وهي رقم المهمة PID والخانة اﻷخيرة هي اﻷمر اللي بيتنفذ CMD
andalusy@linux-box : ~$ ps T
PID TTY STAT TIME COMMAND
4167 pts/2 Ss 0:00 /bin/bash
5026 pts/2 R+ 0:00 ps T
بالنسبة للخيار T أو خيار آخر سيستخدم اﻵن يمكن متابعة المزيد من خلال اﻷمرين
andalusy@linux-box : ~$ ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
andalusy@linux-box : ~$ man ps
عودة للخيار T فهو يوضح جميع المهمات الخاصة بسطر اﻷوامر الحالي - تقبل هذا التوصيف مؤقتا - ولكن اﻷهم اﻵن أن هذا الخيار أضاف خانة أخرى توضح حالة المهمة ... أي أن المهمة ليست مفعلة أو غير مفعلة فقط وانما يوجد العديد من الحالات المختلفة للمهمات
المعنى الحالة
D Uninterruptible sleep, usually IO
المهمة معطلة في انتظار وحدة اخراج أو ادخال
R Running or runnable ,on run queue
المهمة اﻵن في حالتها المفعلة --- شغالة ---
S Interruptible sleep waiting for an event to complete
المهمة في حالة خمول تام لمدة معينة عامة 20 ثانية في انتظار شئ بيخلص
T Stopped, or because it is being traced
المهمة موقوفة عن العمل
Z Defunct ("zombie") process
المهمة موقوفة تماما ولا تنتظر شئ أصلا
الخياران l أو u يعطيان كل المعلومات الخاصة بمستخدم معينة من رقم المهمة و أولوية تنفيذ المهمة ومعدل استهلاكها لوحدة المعالجةCPU وللذاكرة اﻷساسية Main Memeoryوللذاكرة اﻷفتراضية Swapping or Paging وحالة المهمة وهكذا دواليك
andalusy@linux-box : ~$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
qasem 4165 0.0 0.4 4536 1548 pts/1 Ss 18:12 0:00 /bin/bash
qasem 4167 0.0 0.4 4532 1652 pts/2 Ss 18:12 0:00 /bin/bash
qasem 5076 0.2 0.3 3996 1388 pts/1 S+ 20:34 0:00 wget http://server3.mp3quran.net/sds/003.mp3
qasem 5079 0.0 0.2 2480 860 pts/2 R+ 20:35 0:00 ps u
andalusy@linux-box : ~$ ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 4165 4150 23 0 4536 1548 wait Ss pts/1 0:00 /bin/bash
0 1000 4167 4150 15 0 4532 1656 wait Ss pts/2 0:00 /bin/bash
0 1000 5076 4165 15 0 3996 1388 - S+ pts/1 0:00 wget http://server3.mp3quran.net/sds/003.
0 1000 5085 4167 17 0 2268 800 - R+ pts/2 0:00 ps l
الخيار ax
هما خياران مشهوران جدا مع اﻷمر ps الخيار a يعني كل المهمات الخاصة بالنظام وجميع المستخدمين والخيار x بيعطى معلومات عن المهمة دون تفاصيل سطر اﻷوامرcontrolling Terminal الخاص بها
andalusy@linux-box : ~$ ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 init [5]
2 ? S 0:00 [migration/0]
3 ? SN 0:00 [ksoftirqd/0]
4 ? S< 0:00 [events/0]
5 ? S< 0:00 [khelper]
6 ? S< 0:00 [kthread]
9 ? S< 0:00 [kblockd/0]
10 ? S< 0:00 [kacpid]
87 ? S< 0:00 [cqueue/0]
88 ? S< 0:00 [kseriod]
126 ? S 0:00 [pdflush]
127 ? S 0:00 [pdflush]
128 ? S< 0:00 [kswapd0]
129 ? S< 0:00 [aio/0]
----------------------------
----------------------------
----------------------------
5111 pts/2 R+ 0:00 ps ax
اغلب هذه المهمات في مقام ما يسمى daemons بترجمة مبتذلة ممكن نقول عفاريت أو أشباح ... بمعنى إنها مهمات صاحية علطول مبتموتش إلا لما يكون في أمر خاص بذلك ... وطول وقت تشغيلها بتحاول تتابع أحداث نعينة وبتصرف بناء على ذلك بردود فعل مقابلة ... ومنها ما ينفذ روتينات متكررة على مدار أزمنة متفاوتة وهكذا
دايما أمر مخرجات اﻷمر ps ax بتتعالج بأوامر تانية كأن نعد عدد المهمات الخاصة بالنظام وجميع المستخدمين
andalusy@linux-box : ~$ ps ax | wc -l
90
أو كأن نبحث عن مهمة معينة باستخدام اﻷمر grep
andalusy@linux-box : ~$ ps ax | grep -i fire
4153 ? S 0:00 /bin/sh /usr/bin/firefox
4193 ? Sl 26:58 /usr/lib/firefox/firefox-bin
معاملات المهمة Process Attributes :
يوجد بعض اﻷصدارات من النواة Kernel قادرة على تتبع أكثر من 85 معامل لكل مهمة ... كمثال خيارات اﻷمر اللي اشتغلت بيه المهمة ذات نفسها و الوقت اللي اشتغلت فيه و المتغيرات الخاصة بالمستخدم اللي شغل المهمة دية و الملفات المفتوحة من قبل المهمة دية والمجلد اللي شغالة فيه المهمة دية وسطر اﻷوامر اللي اشتغلت منه وهكذا دواليك
طبعا في ملحوظة جديرة بالذكر إن أغلب المعاملات دية بتتورث من المهمة اﻷب اللي من خلالها اشتغلت المهمة دية ... ويمكن بالمفهوم ده بدأت تظهر علاقة المهمة اﻷب PPID بالمهمة PID اللي بتشتغل في أي لحظة ... لكن طبعا مازال فيه تفاصيل تانية كتير مختفية ... تابع للمزيد من المعلومات عن هذه المعاملات man 1 ps وتحديدا من خلال القسم STANDARD FORMAT SPECIFIERS
وبهذا تستخدم ما تشاء من هذه المعاملات مع الخيار o
andalusy@linux-box : ~$ ps -o user,pid,ppid,vsz,comm
ايقاف المهمات :
طبعا المفتاح السحري لهذه الوظيفة هو CTRL+C ولكن بأبسطها كود سي C Code ممكن تلاشي تأثير حرف السي أو تجاهله ولذلك توجد أداة أنجع في التعامل مع هذا الموقف
أمر kill .. بمجرد التعامل مع أمر kill نجد أنفسنا نتعرض لمفهوم لطيف ألا وهو مفهوم Signals أو اﻷشارات ... بمعنى أبسط بيئة اليونكس توفر بيئة من اﻷتصالات ما بين المهمات وما بين النواة في أطار عدد معين من اﻷشارات Signals المعرفة داخل النظام ككل
هذه قائمة كاملة بكل اﻷشارات المتاحة بالنواة الخاصة بنظامك
andalusy@linux-box : ~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
أمر kill يتعامل مع مع رقم المهمة فقط بعد معرفته من خلال اﻷمر ps كمثال
andalusy@linux-box : ~$ ps ax | grep -i fire
4153 ? S 0:00 /bin/sh /usr/bin/firefox
4193 ? Sl 26:58 /usr/lib/firefox/firefox-bin
andalusy@linux-box : ~$ kill 4193
andalusy@linux-box : ~$
طبعا أكيد حاجة عجيبة شوية إنك تمر بالدوامة دية عشان توقف مهمة شغالة ... خصوصا مع أضافة حالتك النفسية اللي بتتخلق ساعة لما يكون فيه برنامج قاتلك الجهاز أو برنامج مش راضي يستجيب معاك ...
عالعموم الطريق اللي ذكر ده هو الطريق الأسلم ... لكن فيه طرق بديلة قد تكون أنسب في حالة مختلفة
عندك أمر pgrep بيبحث في قائمة المهمات الشغالة بكل حالتها المسجلة في مجلد proc/ وبعدين يطلعلك البيانات اللي انت محتاجها طبعا أولهم رقم المهمة PID
andalusy@linux-box : ~$ pgrep init
1
4119
4120
وعندك أيضا اﻷمر pkill اللي بيعمل نفس وظيفة اﻷمر pgrep انه يبحث على كل المهمات اللي توافق كلمة البحث وزيادة على ذلك يرسل اشارة توقيف إلى هذه المهمات-SIGTERM Termination Signal
andalusy@linux-box : ~$ pkill firefox-bin
طبعا استشهادا بالمثال اللي ذكرناه في اننا بندور على مهمة init طلع لنا تلات نتايج على الرغم إنه فيه مهمة واحدة بس اللي اسمها init اللي رقمها 1 ... لكن ما هما المهمتان المتبقيتان ؟ بكل بساطة اﻷمر pgrep أو pkill قاعدين بيبحثوا عن كلمة البحث ويطلعوا كل المتطابق مع الكلمة دية وفي حالتنا هنا ده ميمنعش إنه يطلع نتيجة المهمة kdeinit أو init تانية .. وبالتالي بدأت تتضح خطورة اﻷمر ده في مطابقاته لحاجات احنا مش عايزنها أصلا ؟
طبعا الحل هنا في المشكلة دية اننا نستخدم Regular Expression يحددنا بالظبط آني كلمة احنا عايزنها أولها ايه وآخرها وفي حدود كام حرف وكل ده ينفع يتحدد بمعاملات pgrep ... لكن بالطبع لا يوجد مجال هنا للتفصيل في شرح أساسيات الRegular Expression
بس لو أفسح مجال لذكر آخر كلمة مفروض نستخدم اﻷوامر دية لما نبقى متأكدين هنوقف ايه بالظبط وعارفين ايه اللي هيتوقف
- مدونة قاسم
- لُجأو سجل لتعلق
- قراءة(1322)
