ניהול תהליכים בלינוקס או איך לא להתעצבן כשהמחשב שוב נתקע
לינוקס היא מערכת הפעלה יציבה במיוחד אבל לפעמים הפעלה של תוכנות מסוימות עלולה לגרום לה להאט או להפסיק להגיב בגלל שימוש מופרז במשאבים. כדי להבטיח פעולה חלקה חשוב לדעת כיצד לנהל את התוכנות שרצות על המערכת.
הפקודה top - או איך לראות את התהליכים שרצים עכשיו על המערכת
הרצת תוכנה יוצרת תהליך (process) הצורך משאבי מערכת דוגמת זכרון או משאבי מעבד.
לינוקס מריצה מספר תהליכים במקביל. כדי לראות את התהליכים שרצים עכשיו הקלד את הפקודה top בטרמינל:
$ top
הפלט די ארוך. נציג את השורות הראשונות:
- בשורה הראשונה זמן המערכת וכמה שעות היא עובדת.
- בשורה השנייה מספר התהליכים שרצים כרגע על המערכת (280).
- tasks הוא שם נרדף לתהליכים processes. את רוב התהליכים מריצה המערכת. 220 נמצאים במצב שינה sleeping כי אילו תהליכים שיש בהם שימוש תכוף והם מחכים במצב זה עד לרגע הנתן הפקודה.
- בשורה השלישית סטטיסטיקות של המעבד CPU דוגמת כמה אחוז מוקדש לעבודה כרגע.
- בשורה הרביעית סטטיסטיקות של הזיכרון הראשי של המחשב RAM. חלק גדול ממנו מוקדש לתוכנות שפעולתם כבר הופסקה כדי להפעיל אותם במהירות אם יהיה בכך צורך.
- בשורה החמישית סטטיסטיקות עבור הזיכרון הוירטואלי. אם אתה משתמש בחלק גדול שלו אז כדאי לך לשקול להגדיל אותו.
- החל מהשורה השישית רשומים התהליכים שכרגע עובדים בתוך טבלה. מספר התהליך PID ומי הבעלים שלו USER מופיעים בעמודות השמאליות ביותר. צריך לשים לב במיוחד לעמודות %CPU ו-%MEM . אם אחד התהליכים צורך יותר מדי משאבים לאורך זמן אז כדאי לבדוק מה הבעיה איתו.
הפקודה top כל הזמן מתעדכנת ותופסת לנו את הטרמינל. כדי להפסיק את פעולתה נקליק:
q
אורך הרשימה שמייצרת הפקודה top מוגבלת על ידי גובה הטרמינל. כדי לצפות ברשימה המלאה נפנה את פלט הפקודה לרישום בקובץ:
$ top -b -n 1 > top.log
פקודה דומה ל-top היא ps (קיצור של process status). כדי לצפות בכל התהליכים שמריץ המשתמש שלך הוסף את האפשרות ux לפקודה:
$ ps ux
כדי לראות את הפרטים אודות תהליך מסוים צריך קודם לדעת מה המספר המזהה שלו, PID. לשם כך נשתמש בפקודה pidof עם שם התוכנה.
לדוגמה, מה ה-PID של הטרמינל?
$ pidof gnome-shell
התוצאה:
2355
ועכשיו נשתמש בפקודה ps כדי לראות את פרטי התהליך:
$ ps 2355
והתוצאה:
PID TTY STAT TIME COMMAND
2355 tty1 Sl+ 1:54 /usr/bin/gnome-shell
איך להרוג תהליך?
מדי פעם קורה שתהליכים קורסים. לפעמים זה הדפדפן שמפסיק להגיב ולעיתים ה-IDE שנתקע על משימה בלתי אפשרית. אתה מנסה לסגור את האפליקציה ללא הצלחה. חווייה מעצבנת בהחלט. במקרה כזה אתה יכול להרוג את התהליך אבל קודם אתה צריך לדעת את המספר המזהה PID שלו.
לדוגמה, אם דפדפן פיירפוקס תקוע אז אתה יכול להרוג את כל התהליכים השייכים אליו.
כדי לזהות את את ה-PID עליך להריץ את הפקודה pidof עם שם התוכנה:
$ pidof firefox
התוצאה:
7606 7565 7520 7446
- במקרה זה, אותה תוכנה מריצה 4 תהליכים.
מריצים את הפקודה kill על כל אחד מהתהליכים כדי להרוג אותם. לדוגמה:
$ kill 7606
חוזרים על הפעולה עבור כל אחד מהתהליכים.
הפקודה kill מאפשרת סגירה נקייה של התהליך כולל סילוק שאריות של קבצים ונתונים בזיכרון. אבל לפעמים הפקודה לא מספיקה כדי להרוג את התהליך. במקרה כזה, נוסיף את הסיגנל 9 לפקודה כדי לאלץ את סגירת התהליך. לדוגמה:
$ kill -9 7606
מה עושים אם שולחן העבודה ננעל?
לעיתים נדירות קורה שתהליך קורס ונועל את הגישה לשולחן העבודה. במקרה כזה, נעבור מהממשק הגרפי GUI שאיתו אנו בדרך כלל עובדים (קונסולה 7) לקונסולה 2 שמאפשרת לנו לעבוד ללא GUI.
הקלק את צירוף המקשים הבא כדי לעבור לקונסולה 2:
Ctrl + Alt + F2
הפקודה תפתח טרמינל שאתה צריך להריץ בתוכו את הפקודות כמו בסעיף הקודם.
הרצת הפקודה top מאפשרת למצוא אילו תהליכים שותים את הזיכרון (MEM) או אוכלים את המעבד (CPU). את התהליכים שתוקעים את המערכת הורגים אחד אחד עד לפתרון הבעיה.
אם הגישה הזו לא עובדת, לא תהיה לך ברירה אלא לאתחל את המחשב.
ניהול עבודות jobs
ניהול עבודות היא עניין פחות שימושי אבל הבנת הנושא היא מהותית אם אתה רוצה להבין איך לינוקס עובד.
כשאנחנו מריצים תוכנות מהטרמינל הם רצות בחזית foreground ומשלימות את עבודתם בזמן קצר. אבל יש גם תהליכים שמשך הריצה שלהם ארוך מאוד. לדוגמה, קומפילציה של קוד או הרצה של מודל למידת מכונה יכולים לארוך שעות ואף ימים. יכול להיות שבזמן שהתהליכים רצים תרצה לבצע משימות דחופות יותר בטרמינל בלי לפגוע בתהליכים שעדיין רצים. במקרה כזה אפשר לשלוח את התהליך החוסם לרקע background שם הוא ימשיך בפעולה ויפנה לך את הטרמינל לעבודה.
כדי להדגים פעולה של תוכנה שמשך הריצה שלה ארוך נשתמש בפקודה sleep שכל מה שהיא עושה הוא להקפיא את הטרמינל למספר שניות נתון. לדוגמה, ל-600 שניות:
$ sleep 600
כדי להמשיך לעבוד עם הטרמינל עליך לעצור את התהליך על ידי הקלקה על צירוף המקשים:
Ctrl + Z
התוצאה:
^Z
[1]+ Stopped sleep 600
התהליך עצר.
ואז להשתמש בפקודה bg כדי להעביר את התהליך לרקע:
$ bg
[1]+ sleep 600 &
- התהליך רץ ברקע (מסומן ב-&) ולכן הטרמינל זמין.
הפקודה fg תחזיר את התהליך לחזית:
$ fg
אתה יכול לנהל מספר תהליכים בו זמנית.
ראשית, נחזיר את התהליך לרקע באמצעות הקלקת צירוף המקשים:
Ctrl + Z
והקלדת הפקודה bg בטרמינל:
$ bg
עכשיו שהטרמינל זמין, נריץ פקודה נוספת של sleep (והפעם למשך 700 שניות):
$ sleep 700
נעצור גם אותה:
^Z
[2]+ Stopped sleep 700
ונעביר לרקע:
[2]+ sleep 700 &
אנחנו יכולים לראות את כל התהליכים שרצים ברקע באמצעות הפקודה jobs:
$ jobs
[1]- Running sleep 600 &
[2]+ Running sleep 700 &
המספרים בסוגריים הם מספר ה-job.
- (+) מציין את ה-job האחרון שהעברת לחזית או התחלת להריץ.
- (-) מציין את ה-job הלפני אחרון שהעברת לחזית או התחלת להריץ.
אם אנחנו רוצים להביא תהליך מסוים לחזית אנחנו יכולים להעביר את מספרו לפקודה fg. לדוגמה, אם אנחנו רוצים להחזיר את sleep 700 שמספרה 2 אז נריץ את הפקודה עם הפרמטר המתאים:
$ fg 2
התוצאה:
sleep 700
הפקודה חזרה לחזית.
כיצד לכבות תהליך שתופס את אחד הפורטים של השרת?
הרבה פעמים יוצא לי להתקל בתהליך שתופס את אחד הפורטים ולא מאפשר לי להריץ תהליך אחר שאני רוצה.
לדוגמה, תהליך שתופס את פורט 8000.
נברר מהם מספרי התהליכים (pid) אשר רצים עכשיו על פורט 8000:
$ fuser 8000/tcp
התוצאה אצלי:
8000/tcp: 8321 17655
ננסה להרוג את התהליכים:
$ kill 8321 17655
נוודא שאכן הצלחנו:
$ fuser 8000/tcp
התוצאה אצלי:
8000/tcp: 8321
- מעידה על הצלחה חלקית בלבד.
כדי להרוג באופן סופי ומוחלט את התהליך הסורר נשתמש בסיגנל 9:
$ kill -9 8321
נוודא הריגה:
$ fuser 8000/tcp
- העובדה שלא הוחזר דבר מעידה על כך שדבר לא תופס עכשיו את פורט 8000 😄
אולי גם זה יעניין אותך:
מערכת הקבצים של Linux - מה שרצית לדעת ולא העזת לשאול
ניהול הרשאות, משתמשים וקבוצות בלינוקס
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.