08/05/2024

מדריך לינוקס למתחילים בעברית חלק 6 - ניהול תהליכים (Processes) בלינוקס




 אני שמח שחזרתם אלי לחלק החמישי של המדריך, אם לא עברתם על החלקים הראשונים, מאוד חשוב לעבור עליהם מאחר ובלי החלקים הראשונים לא תצליחו לתרגל ולהבין את החלק הנוכחי, את כל החלקים של המדריך ניתן לקרוא כאן: לינק

במדריך זה נלמד כיצד:
1) איך להציג תהליכים (פרוססים -  Processes) רצים בלינוקס?
2) איך למצוא תהליכים (פרוססים -  Processes) לפי מספר ID או שם?
3) איך לעצור תהליכים (פרוססים - Processes) בלינוקס?
4) איך לתת עדיפות (Priority) לתהליך (Process) מסוים?
5) איך להריץ פקודה מסוימת או תהליך מסוים "ברקע"?
6) איך לנהל תהליכים (פרוססים - Processes) בצורה יותר נוחה בלינוקס?



1. איך להציג תהליכים (Processes "פרוססים") בלינוקס?
אני חייב להגיד שכשהגעתי למצב שבו אני צריך לנהל פרוססים (תהליכים) בלינוקס, הייתי קצת בשוק, כי ניהול פרוססים בלינוקס מתחלק לכמה חלקים ואני אעבור כאן על רוב האופציות הכי "חיוניות" אבל אכתוב עם פירוט קצר את רובן.

א.1 הפקודה ps והפרמטרים שלה.

¿? אנחנו לא נעבור על כל הפרמטרים של הפקודה הזאת כי יש לה 19 פרמטרים "AacefHhjkLlmrSTuvwx"¿?

כעקרון יש שלושה כלים שאיתם אפשר להציג\לנהל פרוססים, בעזרת הפקודה ps בשילוב של כמה וכמה פרמטרים, הפקודה top והתוכנה htop, אנחנו נתחיל מהכי קל, הפקודה ps (לדעתי הפקודה הזאת זה הדבר הכי לא נוח שיש אבל הכי מהיר בשביל לקבל מידע פשוט), ברגע שנקיש את הפקודה, פשוט נקבל רשימה של הפרוססים שרצים לנו כרגע בסשן בטרמינל שלנו, עם המידע הבסיסי ביותר:
  • PID - מזהה תהליך Process ID
  • TTY - הטרמינל שממנו הריצו את הפקודה\תוכנה.
  • Time - הכוונה כאן לא כמה זמן רץ התהליך אלה "זמן ניצולת מעבד" זאת אומרת כמה זמן ה"תוכנה" ניצלה את המעבד, לכן בתצלום מסך זה "0".
  • CMD - הפקודה\תוכנה שרצה כולל הפרמטרים שהריצו עם הפקודה (אם היו).


כמו שאמרתי לפני כן, לפקודה ps יש המון פרמטרים נתחיל עם הפשוט ונלך למסובכים יותר אבל לא נעבור על כולן.

הפרמטר הראשון f- המשמעות שלו "Full format listing" זאת אומרת פורמט מלא, לכל הפרמטרים כאן יתווספו כמה וכמה פרטים כמו כמו זמן:
  • Stime - הכוונה "Start Time" מתי הריצו את הפקדוה
  • PPID - לכל תהליך יש "תהליך הורה" Parent process אז במקרה הזה נוכל לראות את ה Parent Process ID גם.
וישנה אופציה לקבל עוד יותר פרטים בעזרת הפרמטר F- (זאת לא טעות, זה אותה אות רק אות גדולה), נקבל עוד יותר פרטים, שימו לב להבדל: סינטקס ps -f ו ps -F


א.2 אם נרצה להציג את כל הפרוססים שרצים לנו במערכת נריץ את הפקודה ps x:


אני יודע שרואים לא טוב, אז אני מצרף כאן צילום מסך שתוכלו לראות בצורה יותר נורמאלית וברורה:


במקרה של הפקודה הזאת, חשוב להבין מה המשמעות של ה-"?", אז במקרה הזה במידה והפרוסס הותחל בידי המערכת והוא לא הופעל משום טרמינל על ידי המשתמש יופיע הסימן "?" ואם זה משתמש, יהיה כתוב pts, או pts/2 במידה וזה מטרמינל מספר 2, כמו כן יש עמודה נוספת שנקראת STAT בתוך העמודה הזאת יש כמה סימנים שחשוב להבין מה הם אומרים:

R - הפרוסס כרגע רץ .
S (אות "S" גדולה) - התהליך בהמתנה "ישן" פחות מ 20 שניות.
I - הפרוסס במצב Idile.
D - הפרוסס מחכה לקלט-פלט.
Z - פרוסס "זומבי" זאת אומרת הוא סיים את התהליך שלו אבל התהליך הראשי עוד לא קיבל את המידע ממנו.
T - פרוסס עצר.
W - תהליך משתמש בזכרון ה Swap.
< - תהליך עם עדיפות (Priority) גבוהה.
N - תהליך עם עדיפות (Priority) נמוכה.
s - (אות "s") בקטן - מדובר על "תהליך ראשי".

א.3 הינה עוד דוגמאות לפקודות שפשוט יראו לכם את אותו המידע אבל בצורה אחרת, כאשר אצל כולם כמעט המידע יהיה זהה רק בסדר אחר.

להציג פרוססים של משתמש מסוים: ps -U, נוכל להקיש לאחר ה"U" את המשתמש הרצוי ונקבל את כל מה שהוא מריץ, בתור ברירת מחדל אם נריץ את הפקודה ps -u (והאות "u" תהיה בקטן) נקבל אך ורק מידע עבור כמה עמודות כמו שם משתמש, אחוז ניצול מעבד, pid ו cmd.

דוגמא ל : ps -u:


כשמתמשים ב "U" (אות גדולה) חובה להוסיף את המשתמש הרצוי אחרת נקבל שגיאה: ps -U user_name:

¿? אם נריץ את הפקודה עם המשתמש root בסוף נקבל בעמודה tty רק "?" ¿? 

לדוגמא, אני מריץ את הדפדפן FireFox נוכל לראות אותו כאן אם נוסיף את השימוש בפקודה grep (עליה למדנו בחלק 5)
ואז הפקודה תהיה בנויה בצורה הזאת : ps -U lev|grep firefox



א.4 להציג את כל הפרוססים של המשתמש שלכם ps -ux:


א.5 להציג פרוססים ועמודות מסוימות ps -e -o pid,uname,pcpu,pmem:


א.6 נגיד ואנחנו רוצים לעשות את שם העמודות יותר קריא, אפשר לשנות את שם העמודות (זה לינוקס :) ):

ps -e -o pid=PID,uname=USERNAME,pcpu=CPU_USAGE,pmem=%MEM,comm=COMMAND

אני אשנה את זה למשהו יותר "קריא" בשביל הנסיון:

ps -e -o pid=Tahalich,uname=meshtames,pcpu=meabed,pmem=zikron,comm=pkuda




2. איך להציג פרוססים לפי מספר ID?

להציג תהליכים תהליכים מסויימים לפי מספר ps -p process_id_number , PID (ניתן לשלב כמה PID ביחד):


כפי שהבנתם יש המון פרמטרים, החלק הכי מגניב, אפשר לשלב אותם ולקבל תוצאות שונות, לדוגמא נשלב את שלושת הפרמטרים הבאים aux הינה מקרא קצר: 

a - הצגת מידע אודות כל התהליכים וכל המשתמשים.
u - הצגת שם המשתמש שמריץ את הפרוסס.
x - מוסיף גם את הטרמינלים מהם רצים התוכנות.

ואז מקבלים פקודה שנראת כך ps -aux ומקבלים המון מידע שימושי:

¿? התצורה הזאת היא התצורה השימושית ביותר בפקודה ps ממה שאני ראיתי ברשת¿?


מי שרוצה לקרוא על כל האפשרויות של הפקודה הזאת, יכול להקיש בטרמינל "man ps" ולקבל את כל המידע אודות הפקודה הזאת.

3. איך לעצור פרוססים בלינוקס?

מטבע הדברים הפקודה לעצור פרוסס היא בעזרת הפקודה Kill אבל כמו רוב הדברים בלינוקס, גם כאן לא הכל פשוט.

מאחורי הקלעים, כשאנחנו מפעילים את הפקודה "kill" אנחנו בעצם שולחים "סימן kill" לפרוסס שאנחנו רוצים לעצור, אותו סימן נקרא בלינוקס "סיגנל" בשביל לראות את כל הסיגנלים אנחנו נריץ את הפקודה Kill -l.

בהרצת הפקודה kill -l אנחנו נקבל רשימה של "סיגנלים" שאפשר לשלוח לפרוסס שלנו ובעצם להחליט אם אנחנו רוצים "לבקש" ממנו שהוא יעצור ואז הכל יעצר בצורה יפה, או לחלופין להכריח אותו "בכוח" ואז הוא יסגר לא משנה מה.

להלן הרשימה:


לפני כן, חשוב לציין אם אתם כותבים את הפקודה kill ואז את התהליך, אתם בעצם משתמשים במספר 15 ברשימה הזאת, הינה הסבר על שתי הסיגנלים הכי נפוצים (כולל מספר 15):

  • 1) מספר 15 "Sigterm" -  המשמעות היא Terminate "חסל" הסיגנל הזה, הוא גם זה שנשלח בתור ברירת מחדל כשאתם כותבים נטו את הפקודה Kill, ובעיקרון מתבצע Soft kill (קצת נוגד את השם הייתי אומר..).
  • 2) מספר 9 "SIGKill" - כבה תהליך בכוח.

ישנן כמה דרכים להשתמש בפקודה הזאת:
א. לרשום kill proces id  - לצורך דוגמא : kill 6400 , במקרה שלי אני אסגור את FireFox שהמספר ID שלו זה 7146:



ב. לרשום  kill -[signal_number] process id לצורך דוגמא: kill -9 9442, גם הפעם נסגור את FireFox:







ג. לרשום kill -s [signalname] process id לצורך דוגמא: kill -s SIGTERM 9442


ד. אם נרצה לעצור תהליך בעזרת השם של התהליך, נוכל להשתמש בפקודה killall בפורמט הבא killall firefox,
תקחו בחשבון שבמקרה הזה, הפקודה תחפש את כל מה שתואם ל "firefox" והיא תסגור אותו - לא רק חלון אחד, אלה את כל החלונות שפתחתם שהם נקראים "firefox".





4. איך לתת עדיפות (Priority) לתהליך (Process) מסוים?

מאוד מעניין לראות שככל שאתה נכנס יותר לעומק הדברים בלינוקס, אתה מגלה שבעצם כל אחד "המציא" משהו למערכת הזאת ותרם בצורה כזאת או אחרת, בנוסף רואים עד כמה המוח של אותם האנשים חשב בצורה אחרת, ממש כמו שסטיב ג'ובס הפך את המשפט "Think different" לסוג של "מותג", ניהול "עדיפות" של תהליכים בלינוקס נקרא "נחמדות" או באנגלית "Niceness" כן, כן, כמו ששמעתם, צריכים להיות נחמד למחשב ! 🤣 ובעצם ניהול העדיפות של הפרוסס מתבצע בעזרת שתי פקודות האחת היא nice והשניה היא renice.

4.א הפקודה renice - להכיל עדיפות על תהליך (Process) שכבר רץ.

ראשית, נבדוק אילו פרוססים רצים בסשן שלנו בעזרת תצוגה "ארוכה" ps -l במקרה שלי נקבל שלושה תהליכים שרצים :


להלן פירוש העמודות (יש כאן עמודות שגם אני לא הכרתי לכן ספציפית כאן, המידע נלקח מאתר חיצוני):

F- הדגלים.
S או STAT - מצב התהליך.
PID - המספר המזהה של התהליך.
PPID - המספר המזהה של תהליך האב.
C או CP השימוש במעבד ומידע על התזמון.
PRI - העדיפות של התהליך.
NI -  ערך ה NICE.
ADDR - כתובות הזיכרון של התהליך.
SZ - השימוש בזיכרון וירטואלי.
WCHAN  - מזהה, למשל כתובת זיכרון, לאירוע שהתהליך ממתין לו, אם קים כזה.
TT או TTY - המסוף שקשור לתהליך.
TIME - משך הזמן בו התהליך השתמש במעבד.
CMD או COMMAND - שם התהליך, כולל הארגומנטים לפקודה, אם היו. לעיתים קרובות ברישום קטוע.

מה ההבדל בין Priority לבין Niceness בלינוקס?

חשוב להבין מה ההבדל בין PRI ("Priority" עדיפות תהליך) ו NI (Niceness "נחמדות תהליך"), בעיקרון ההבדל הוא כזה, PRI נקבע על ידי הליבה של לינוקס, אתם בטח מכירים את המושג "Kernel" (שזה הפירוש של המילה "ליבה" באנגלית), העדיפות במקרה הזה נקבעת לתהליכים שרצים בזמן אמת ומסומנת על ידי "RT", התווך של התהליכים האלה הוא מ-0 עד 139, העדיפות לתהליכים של הליבה (המערכת) הם מ-0 עד 99 והתווך לתהליכים של משתמש הם מ 100 עד 139.

במקרה של NICE - המשתמש הוא זה שיכול להחליט על עדיפות המשאבים שתקבל התוכנה, זאת אומרת שהמשתמש יכול להגיד ללינוקס "תשמע, תריץ את התוכנה הזאת לפני התהליכים האחרים ותן להם משאבים" כמו כן בתור משתמש עם הרשאות אדמין (ROOT) תוכלו לתת עדיפות גם לתהליכים של המערכת, התווך הוא מ 20- עד 20 כאשר הכי גבוהה זה 20-,
ברירת המחדל הוא "0" והעדיפות הכי נמוכה היא "20" גם כן.

בשביל לשנות תהליך, צריך להשתמש ב SUDO אבל רק אם אנחנו מעלים את העדיפות של התהליך, בהורדת עדיפות אין צורך בשימוש ב SUDO, אז במקרה הזה הרצתי את vi (עורך הטקסט שמגיע מובנה בלינוקס, בהמשך יהיה מדריך שלם רק על vim\vi זה בערך אותו דבר וגם על עוד עורך טקסט ידוע בשם nano, אז כרגע רק נריץ אותו לצורך הדגמה ברקע) פעמיים בשביל שאפשר יהיה לבצע איתו שינויים, לצורך כך נריץ את הפקודה vi, יפתח לנו ממשק של עריכת טקסט, ונלחץ במקלדת את ctrl+z זה ישים את התוכנה "ברקע", ואז נקיש את ps -l ונוכל לראות את vi נמצא ברשימת התהליכים של הסשן שלנו:


עכשיו לצורך שינוי העדיפות אנחנו נריץ את הפקודה ובה נוסיף את המספר מ 20- עד 20 ואת מספר המזהה של התהליך בצורה הבאה: [sudo renice [nice_value] -p [process_id ואז נתבקש להכניס סיסמא של המשתמש שלנו ובעצם נוכל לראות את השינוי שנעשה במקרה שלי זה יראה ככה: sudo renice -10 -p 12457 ובעצם מה שקורה במקרה הזה, נעלה את העדיפות של התהליך הזה למקום כמעט הכי גבוהה שהוא "20-", נריץ שוב פעם את ps -l:


לצורך הדגמה, אני אוריד את רמת העדיפות ולא אשתמש ב  renice -[nice_value] -p [process_name] :sudo, ובגלל שאני מוריד את רמת העדיפות (מתקרב לכיוון ה-"0") אני לא צריך להשתמש ב sudo.
במקרה שלי זה יראה כך: renice +10 -p 12457 


4.ב הפקודה Nice - להפעיל תהליך עם הגדרת עדיפות מראש - שכשירוץ הוא יהיה מתועדף.

לצורך הפעלת תוכנה עם תיעדוף מראש נשתמש בפקודה nice בצורה מאוד פשוטה nice -n 10 vim ואז התוכנה פשוט תרוץ עם תיעדוף,סינטקס של הפקודה:  nice -n[nice_vlue] [process_name] 


לאחר מכן נפעיל את vi שוב פעם ובשביל להציג את ההבדל בתיעדוף נריץ את ps -l:


וכפי שאנחנו רואים, (התהליך עם הסימון הירוק) התהליך החדש התחיל לרוץ עם עדיפות שונה מאשר התהליך עם הסימון האדום שהרצנו לפני כן.

5.איך להריץ תהליך מסוים או תוכנה מסוימת ברקע?
בלינוקס יש הרבה פלוסים אחד מהם מאוד מגניב, אפשר לשים כל פקודה לבצע דברים ברקע, לא, לא בתור סקריפט, אלה להריץ לדוגמא את הפקודה פינג, כמה שעות "מאחורי הקלעים" בלי שזה ירוץ לנו מול העיניים ובלי שנצטרך לפתוח כמה וכמה חלונות של טרמינל - דבר שיעלה לכם את הפרודוקטיביות.

5.א.מה ההבדל בין פקודה שאנחנו רואים לבין לבין תוכנה מאחורי הקלעים?
לצורך הסבר נגיד ואנחנו פותחים חלון ומבצעים פקודת ls , או כל פקודה פקודה אחרת, אנחנו נקבל פלט, הפלט שאנחנו רואים והפקודה שהרצנו, היא פקודה שהיא "מקדימה" ולא מאחורי הקלעים, זאת אומרת היא לא רצה "ברקע" בתור "TASK" (משימה), היא אומנם מאוד קצרה, אבל היא מול העיניים, באנגלית זה נקרא "Foreground task" פעולות שרצות ברקע נקראות "Background task".

5.ב.איך להריץ פקודה ולשים אותה מאחורי הקלעים?
לצורך הדגמה ניקח את הפקודה פינג, שהיא רצה בהמשכיות, וניתן פינג בלי הפסקה לגוגל נגיד, בצורה הזאת ping 8.8.8.8
ניתן לפקודה להתחיל לרוץ ולאחר מכן, נלחץ על ctrl+z, מה שיקרה , אנחנו נשוב לחלון הטרמינל שלנו אבל הפקודה תהפוך להיות משימה ברקע, או בשפת לינוקס "job":


5.ג איך להעביר תהליך מה"רקע" לקדמת ה"במה" - הפקודה fg?
בשביל להגיע חזרה לפקודה הזאת, אני יכול לעשות כמה דברים, ראשית להקיש "fg" (קיצור של Foreground) אז התהליך שרץ מאחורי הקלעים יעבור להיות "מקדימה" ונוכל לראות אותה עובדת :


ובעצם ברגע זה אני יכול להפסיק את הפקודה כאילו הרצתי אותה לפני רגע, בעזרת ctrl+c כמו תמיד, והפקודה תעצור:


5.ד איך להפעיל תוכנה וישר לשים אותה ברקע?
במידה ואנחנו רוצים להפעיל תוכנה וישר לשים אותה ברקע, אנחנו נוסיף את הסימן "&" אחרי שם התוכנה לדוגמא אני אפעיל את העורך טקסט "vi" ישר מאחורי הקלעים הסינטקס & vi ונלחץ ENTER, מה שיקרה הוא שהתוכנה ישר תלך אל מאחורי הקלעים:


אם נקיש את הפקודה fg נכנס חזרה לתוכנה, בשביל "להרוג" את vi אפשר להקיש [kill -9 [process_id ואז נקבל תגובה שהתוכנה נסגרה:




נגיד ויש לי 15 ג'ובים ואני רוצה להרוג את כולם ביחד, נקיש `kill -9 `jobs -ps - הסימן ששמתי לפני ה - JOBS הוא סימן של "גרש" ,זה נמצא מעל לכפתור ה-TAB במקלדת:


נבדוק תחילה שיש ג'ובים שרצים על ידי הפקודה jobs, לאחר מכן נקיש את פקודת ה"חיסול":




לאחר מכן נריץ את פקודת ה"חיסול" לא נקבל שום אינדקציה על כך שקרה משהו לכן רק כשנבדוק (נריץ Jobs), נראה שכל הג'ובים הפכו להיות killed:


חשוב להגיד, ברגע שנקיש fg התוכנה שתצא "קדימה" היא התוכנה האחרונה שהפעלנו, במקרה הזה, זאת תהיה התוכנה vi.

5.ה איך לבחור איזו משימה להביא לקדמת ה"במה"?
לצורך כך, אנחנו נקיש את הפקודה fg ואת המספרים של "מזהה המשימה" מה שנמצא בעבמודה בצד שמאל:


זאת אומרת נקיש fg 1 ואז נראה את הפינג רץ ואז נוכל לעצור אותו:



תסכימו איתי שזה הרבה יותר נוח מאשר לפתוח 4 חלונות של פינג לדוגמא?

6.איך לנהל פרוססים בצורה יותר נוחה בלינוקס?
כמו שראינו ניתן לנהל פרוססים עם פקודות אבל זה לא ממש נוח, כמו רוב הדברים בלינוקס, כפי שראינו גם כן, ניתן לנהל פרוססים עם כמה וכמה תוכנות, האחת שמגיע מובנת בתוך מערכת ההפעלה בשם top והשניה שלא מגיע מובנת בתוך מערכת ההפעלה שנקראת htop אותה גם נתקין ונעבור עליה, אני אעבור על שתיהן ועל הפונקציות העיקריות.
אני בטוח שבסוף המדריך תגידו לי "אז למה לא סיפרת לנו על זה ישר?!" זה כי צריך ללמוד עוד דברים חוץ מ"קל" 😇.

6.א נתחיל עם הפקודה המובנת top:, הדבר מאוד פשוט, מקישים את התוכנה ומקבלים מידע אודות המחשב, את העמודות פירשתי יותר מוקדם.

בשביל להריץ את הפקודה, פשוט נריץ top, וזהו, בכל שרת\תחנה נראה מידע כמעט זהה, הדבר שיהיה שונה זה אחוז ניצולת מעבד כמובן, כמות זכרון RAM ודברים ועוד דברים טכניים אשר שונים ממחשב למחשב.


לצורך יציאה מהמסך הזה, נקיש על "Q", בתור ברירת מחדל, המסך מתעדכן כל 3 שניות.

פירוש מלא של החלק העליון של top:
  • ליד השורה הראשונה  top -  נוכל לראות שעה נוכחית, כמה זמן המערכת דלוקה, כמה משתמשים מחוברים, וממוצע עומס על המעבד.
  • בשורה השניה Tasks - נוכל לראות את כמות הפרוססים שיש לנו במערכת, כמה מהם רצים, כמה מהם עצרו וכמה מהם זומבי (מה זה זומבי מתואר למעלה)
  • השורה שלישית CPU - אחוז ניצלת מעבד, העמודה us היא "תחום משתמש" User Space, דברים שרצים ב"תחום" המשתמש, אם התקנתם ליברה אופיס, אז הוא ירוץ ב"תחום משתמש", בעצם כל מה שלא מופעל בגדול על ידי מערכת ההפעלה, רץ ב"תחום משתמש", העמודה לידו sy היא "תחום מערכת" זאת אומרת "System Space" לידו, מה שלמדנו יותר מוקדם ni שזה niceness, העמודה הבאה id היא idle, כמה זמן המעבד היה ב idle, זאת אומרת כמה שהמספר יותר גבוהה, ככה זמן ה idle (הזמן שהמעבד לא עושה כלום) יותר ארוך, העמודה wa היא עמודה שאומרת "waiting" זאת אומרת כמה זמן משימה כלשהיא מחכה לקבלת קלט או פלט, ככל שהאחוז יותר גבוהה, ככה זה יותר גרוע, כי זה אומר שהשרת שלנו מחכה למשהו, וזה לא אמור להיות ככה, הוא לא אמור לחכות לשום דבר, העמודה hi , מדברת על כמה זמן המעבד מבזבז על איבוד מידע מחומרה, והעמודה si מציינת כמה זמן המעבד מבזבז זמן על איבוד של תוכנה, בימינו כמעט ולא תתרכזו בזה, החלק האחרון st מראה כמה זמן המעבד הוירטואלי מחכה למעבד הפיזי, גם בזה כמעט ולא תגעו בימינו לכן זה לא כל כך משנה.
  • השורה הרביעית Mib Mem - כמה זכרון RAM יש לנו בכללי, כמה זכרון פנוי, כמה בשימוש, כמה זכרון יש ב"קאש".
  • השורה החמישית Mib Swap - כמה זכרון וירטואלי יש לנו בכללי, כמה פנוי, כמה בשימוש, וכמה ניתן להשתמש.

פירוש מלא של העמודות בחלק התחתון:

PID - מספר תהליך Process ID.
USER - איזה משתמש מריץ את התהליך.
PR - תיעדוף PRIORITY של תהליך.
NI - כמה NICENESS יש לתהליך.
VIRT - כמה ניצולת של זכרון וירטואלי.
RES - אחוז ניצול RVM.
SHR - אחוז ניצולת זכרון שיתופי.
CPU - אחוז ניצול מעבד.
MEM - אחוז ניצול מעבד.
TIME - כמה זמן ניצל המעבד עבור איבוד התהליך.

בשביל שנוכל לראות את כל התהליכים שיש להם תהליך "ילד" נלחץ על shift+v ואז בעצם נקבל תצוגה שונה, שבה נראה  את ה"משפחה" של כל תהליך ותהליך, נוכל לראות את "תהליך האב" ואת "תהליך הילד":



אם נגיד אנו רוצים לראות מה התהליך שמנצל הכי הרבה את המעבד נלחץ על shift+p ואז נקבל סידור לפי ניצולת מעבד:


אם נגיד אנו רוצים לראות מה התהליך שמנצל הכי הרבה זכרון, נלחץ על shitf+m 


אם אני רוצה לשנות את מהירות ה"עדכון" של התוכנה, נלחץ על האות "D" ואז נוכל להכניס את זמן הרענון החדש
במקום המיועד לו:


שימו לב, ככל שהמספר יהיה גבוהה יותר, ככה קצב ה"עדכון" יהיה נמוך יותר

נגיד שאנחנו רוצים "לכבות" תהליך מסוים שמנצל יותר מדי זכרון או מעבד, נלחץ במקלדת על k ונתבקש להכניס את מזהה התהליך (Process ID) של תהליך שאנחנו רוצים להרוג, לאחר שהקשנו את מספר התהלי, המערכת תשאל אותנו איזה סיגנל אנחנו רוצים לשלוח לתהליך, כמו שלמדנו יותר מוקדם, סיגנל מספר 15 הוא זה שמבצע "כיבוי", לכן נקיש 15 או 9 (הסבר על שתיהם יש למעלה). 


נגיד ואנחנו רוצים לקבוע niceness בתוך top, נלחץ על r ושם נכניס את הערך nice שאנחנו רוצים לקבוע (יותר מוקדם למדנו על הערכים והתווך של ה nice)


כלל מקשי הקיצור ב top:
  • חץ למעלה \ חץ למטה - ניווט
  • q - לצאת
  • shift-p - סידור עמודה לפי ניצול מירבי של מעבד
  • shift-m - סידור עמודה לפי ניצור מירבי של זכרון
  • shift-t - סידור עמודה לפי זמן ריצה של תהליך
  • shift-n - סידור עמודה לפי מספר תהליך (Process ID)
  • t - משנה את התצוגה של המעבד בחלק העליון
  • m - משנה את התצוגה של הזכרון בחלק העליון
  • shift-r - משנה את הסדר של תצוגת התהליכים הפוך מאשר ברירת מחדל
  • с - לחיצה על האות C מראה נתיב מלא של תהליך.
  • shift-v - מראה את ההיררכיה של תהליך "ילד" תהליך "הורה"
  • k - להפסיק תהליך על ידי שליחת סיגנל ברירת מחדל "SIGTERM"

6.ב דרך נוספת ויותר נוחה לראות פרוססים - התוכנה\כלי htop.
אז כאן מתחיל כל ה"כיף", כפי שאמרתי לפני כן, בלינוקס כמו ברוב הדברים יש המון דרכים לבצע כל מיני דברים, יש את הכי מסובך שהיה בהתחלה, לאחר מכן אנשים החליטו שזה קשה ומסובך והתחילו ליצור כלים משלהם, ואחד הכלים הללו הוא הכלי לניהול תהליכים בשם htop, הכלי הזה לא מגיע מובנה בתוך הלינוקס, לכן נצטרך להוריד אותו ולהתקין (אל תדאוג, כמו בהרבה מקרים, הכל יהיה מתוך שורת פקודה וכמובן בחינם ובצורה חוקית ובתוך שניות).

6.ג איך להתקין htop בלינוקס?
אם תנסו להריץ את הפקודה המפעילה htop, לינוקס תגיד לכם "תשמע אין לי דבר כזה, אבל אתה יכול להתקין אותה עם הפקודות הבאות.."



כרגע אני לא אתן יותר מדי הסבר אודות הפקודה apt (בהמשך יגיע מדריך שלם על apt) ככה שכרגע לצורך התקנה נבצע את הפעולה הבאה: sudo apt install htop ונלחץ ENTER, לאחר מכן נצטרך להכניס את הסיסמא שלנו ונלחץ ENTER עוד פעם ובעצם בתוך שניות, המערכת הורידה והתקינה את התוכנה שאנחנו צריכים:


וכרגע במידה ונריץ את הפקודה htop, נקבל מסך קצת יותר ידידותי ומעניין מאשר ה top:


6.ד עבודה עם htop.

מאחר ואני מחובר למערכת דרך חלון של ווינדוס, אני בעצם יכול להשתמש בעכבר בשביל ללחוץ על עמודות ועד', לדוגמא אם אני רוצה לבצע סינון לפי ניצולת זכרון, אני פשוט יכול ללחוץ על העמודה של הזכרון עם העכבר.

ניתן לבצע את אותו הדבר על ידי לחיצה על shift-p, סינון לפי ניצולת זכרון נלחץ על shift-m.



במקרה הנ"ל אנחנו מחוברים ללינוקס מתוך מערכת הפעלה כלשהיא, ויש עכבר ומקלדת אבל מה יקרה במידה ותצטרכו לעבוד על שרת שאין לו עכבר? במקרה הזה חובה ללמוד קיצור מקשים, אני לא אעבור על כל הקיצורים, אז אעבור על אלו שהם הכי שימושיים לדעתי.

6.ה ניווט ב htop.
ניתן לנווט בעזרת מקשי החצים במקלדת בשביל להעלות למעלה או למטה.

6.ו חיפוש של פרוסס ב Htop.

מאחר ויש המון פרוססים ואנחנו רוצים פרוסס ספציפי, ניתן ללחוץ על f4 ופשוט להתחיל לכתוב את הפרוסס שאתם מחפשים,
הטקסט יופיע למטה:


כמו כן ניתן לסנן את הרשימה לפי משתמש, על ידי לחיצה על כפתור ה u ומצד שמאל תופיע רשימה כל המשתמשים (כולל משתמשים שהם משתמשי מערכת), דפדוף בהם יביא לפרוססים שמריץ אותו משתמש:



6.ז איך לסגור פרוסס ב Htop.

במידה ונרצה לסגור תוכנה (להרוג פרוסס), נלחץ פעמיים מהירות על F9 במקלדת, ומצד שמאל נקבל רשימה של הסיגנלים שאנחנו יכולים לשלוח לפרוסס (דיברנו עליהם היום כבר כמה פעמים), במקרה הזה אני בוחר vi ואלחץ על סיגנל 15, ולאחר מכן אלחץ
ENTER:


6.ח קבלת עזרה אודות htop

להבדיל מפקודות אחרות, במקרה של htop במידה ותרצו לקבל עזרה, הכנסו לתוך התוכנה, הקישו f1 ותוכלו לקבל עזרה אודות התוכנה:




6.ט מקרא htop

כמו ב top, כאן התצוגה זהה מבחינת עמודות, פרט לחלק העליון שאני מאמין שהכל ברור, המספרים מצד שמאל אלו ליבות המעבד, אחוזי הניצול, מתחת לזה mem, זה הזכרון הפיזי, כאן ניתן לראות אותו ב GB מצד ימין, ומתחת לזה, זכרון וירטואלי, מה שנקרא בלינוקס swap, בחלק העליון מצד ימין, אלו תהליכים, ממוצע עומס על המעבד, וכמה זמן המחשב דלוק:



זה הכל להפעם, במדריך זה למדנו על ניהול פרוססים.

כמו תמיד לכל שאלה המייל שלי levl@leidertech.co.il

וכמובן סרטון מצולם:


04/05/2024

מדריך לינוקס למתחילים בעברית חלק 5 - ניהול שירותים (Services) בלינוקס

 

אני שמח שחזרתם אלי לחלק החמישי של המדריך, אם לא עברתם על החלקים הראשונים, מאוד חשוב לעבור עליהם מאחר ובלי החלקים הראשונים לא תצליחו לתרגל ולהבין את החלק הנוכחי, את כל החלקים של המדריך ניתן לקרוא כאן: לינק

מה נלמד היום?

1) הסבר -  מה זה systemd בקצרה?
2) לראות את כל השירותים (Services) שיש במערכת לינוקס?
3) איך לראות את כל השירותים (Serivces) הפעילים במערכת לינוקס?
4) איך לראות את כל השירותים (Services) המבוטלים (Disabled)  במערכת לינוקס?
5) איך לראות את כל השירותים (Services) שלא עלו במערכת ההפעלה?
6) איך להפעיל שירות (Service) בלינוקס?
7) איך לעצור שירות (Service) בלינוקס?
8) איך לבצע "טעינה" מחדש (לא הפעלה מחדש) של שירות (Service)?
9) איך לבדוק מצב של שירות (Service) ספציפי בלינוקס?
10) איך לעשות הפעלה מחדש לשירות (Service) בלינוקס?
11) איך לגרום לשירות (Service) להעלות אוט' לאחר הפעלה מחדש של מערכת?
12) איך לבטל עליה אוט' של שירות (Service) לאחר הפעלה מחדש של מערכת בלינוקס?
13) איך לבצע "טעינה" מחדש (לא הפעלה מחדש) של שירות (Service)?
14) איך לבצע חיפוש של שירות (Service) מסוים?
15) איך לבדוק לוגים של שירותים?
16) איך לצפות בלוג בזמן אמת?

1. מה זה systemd?
בגלל שאנחנו לא הולכים להיות כאן מנהלי רשתות, בחרתי לנכון לתת לכם רק את ה"תכלס" של המידע בנושא הזה, אם תרצו לקרוא יותר, אפשר לקרוא בגוגל.
בגדול, systemd -  הוא "מנהל הסרוויסים" במערכת לינוקס, האחראי על ניהול הסרוויסים בלינוקס.
בכל פעם שנפעיל, נאפשר או נבטל סרוויס, מאחורי הקלעים אנחנו נרשום פקודה והוא זה שיבצע את זה - ושוב זה רק על קצה המזלג, יש שתי פקודות ששייכול ל systemd, הפקודה הראשונה שמתפעלת את הסרוויסים במערכת שהיא systemctl, והשניה שהיא אחראית על לוגים היא journalctl.

2. איך להציג את כל השירותים (Service) שיש במערכת לינוקס?
לצורך הצגת כלל השירותים שיש במערכת, נשתמש בפקודה:  systemctl --type=service
לצורך יציאה מהחלון של השירותים נלחץ על "Q" במקלדת.
אין צורך ב sudo, שימו לב הרשימה מאוד ארוכה:



3.איך לראות את כל השירותים (Services) שפעילים בלינוקס?
לצורך הצגת כלל השירותים הפעילים נשתמש בפקודה: systemctl list-units --type=service --state=running
הפירוש של הפקודה ברור, פרט ל-unit, כשאר במקרה הזה "unit" הוא שירות.

(תשימו לב למשהו מעניין, למטה, כתוב שנטענו 35 units, מערכת הפעלה עם 35 שירותים רצים.. זה אחלה דבר)



לצורך השוואה, הרצתי ספירה של שירותים שיש לי במערכת ווינדוס כרגע.. מצב שונה לגמרי 144 שירותים:



4. איך לראות את כל השירותים(Services) המובטלים בלינוקס?
לצורך הצגת שירותים לא פעילים בלינוקס, נשתמש בפקודה : systemctl list-unit-files --state=disabled
נקבל מידע מאוד מפורט ומאוד ברור לגבי נושא השירותים:



5. איך לראות את כל השירותים(Services) שלא הצליחו להעלות בתהליך ה Boot בלינוקס?
לצורך הצגת שירותים שלא צלחו עם עלית המחשב,
 נשתמש בפקודה:  systemctl list-units --type=service --state=failed,exited



6.איך להפעיל שירות (Service) מסוים בלינוקס?
לצורך הפעלה של סרוויס נריץ את הפקודה :  systemctl start service_name
מאחר ואנחנו נמצאים במערכת מאוד מגניבה, עצרתי את השירות של ממשק המשתמש לצורך ההדגמה ואני הולך להפעיל אותו עכשיו, מאחר ואנחנו מתכוונים לבצע מוניפולציה למערכת ההפעלה, אז נצטרך להקיש סיסמא של המשתמש שלנו, לאחר מכן כמובן נקבל את ה"שם המלא" של הסרוויס שאותו אנו מתכוונים להפעיל, ולאחר מכן נלחץ ENTER.
והמערכת תפעיל את השירות.


7.איך לעצור שירות (Service) מסוים בלינוקס?
ההפך מהפקודה הקודמת, במקרה הזה נשתמש ב "systemctl stop gdm3 - "stop
כמו בפעם הקודמת, נצטרך להקיש את הסיסמא והמערכת תעצור את השירות:


8.איך לבצע "טעינה" מחדש (לא הפעלה מחדש) של שירות(Service) בלינוקס?
במידה ונרצה לבצע "טעינה מחדש" לשירות מסוים (בדרך כלל מיועד לקבצי קונפיגורציה או לשינויים שביצעתם) נשתמש בפקודה :  systemctl reload service_name
מה שקורה בפועל, במקרה הזה המערכת לא עושה "כיבוי והפעלה מחדש" לשירות, אלה עושה לו סוג של "ריפרש" מה שחוסך זמן רב לפעמים:



9. איך לבצע "הפעלה מחדש" לשירות(Service) מסוים בלינוקס?

במידה ונרצה לבצע "הפעלה מחדש" לשירות מסוים (בדרך כלל מיועד לקבצי קונפיגורציה או לשינויים שביצעתם) נשתמש בפקודה :  systemctl restart service_name
בפועל מערכת ההפעלה "מכבה" את השירות ומפעילה אותו שוב פעם.


10. איך לבדוק מצב (Status) של שירות (Service) מסוים בלינוקס?
במידה ונרצה לראות מצב של שירות מסוים, נקיש את הפקודה: systemctl status gdm3
ונקבל תוצאה על כך שהשירות Inactive במקרה הזה (כי עצרתי אותו בפקודה הקודמת),
כמו כן נקבל עוד מידע לידע כללי, כמו גם לוג קטן למטה.


11.איך להגדיר  שירות (Service) מסוים למצב שיעלה אוט' ?
אני לא מתכוון כאן למצב שבו אתם עושים לשירות מסוים "start", אלה למצב שבו אתם עושים לשירות "Enable" שיעלה עם עליית המחשב, זאת אומרת לשנות לו את מה שמוכר בווינדוס בתור "Startup type":



אז במקרה הזה אנחנו נגדיר את השירות שלנו (Service) שיעלה אוט'
עם הפקודה הזאת:sudo systemsctl enable service_name 

וקיבלנו הודעה על כל מה שהמערכת עושה בשביל להפעיל את השירות(Service) שאנחנו רוצים:



12.איך לבטל עליה אוט' של שירות(Service) בלינוקס?
לצורך כך נשתמש באותה הפקודה רק שנשנה את הפרמטר enable ל sudo systemctl disable service_name : disable


13.איך להציג מצב מסוים של שירות (Services) בלינוקס?
נגיד ואני רוצה לבדוק מצב של שירות מסוים, הרי אם יש לי המון שירותים זה יקח שעות לדפדף בין כל השירותים שיש במערכת, בדיוק למקרה הזה יש פקודה שנקרא grep שניתן להשתמש בה בכל מיני דרכים (יהיה מדריך נפרד על הפקודה הזאת כי היא מאוד חשובה בעבודה עם לינוקס), במקרה הזה אנחנו נשתמש בה דרך "הצינור" - Pipeline, כמו שיש ב  PowerShell (למי שמכיר, אם אתם לא מכירים, עברו למדריך שלי אודות PowerShell דחוף ! כאן), בעיקרון הפייפליין מיוצגת במקלדת על ידי הסימן הזה "|" בשביל "לכתוב" אותה נלחץ על \+Shift ונקבל את - "|"
הפייפליין מדגמן !

ובעצם הפקודה תיראה כך: systemctl --type=service --state=running |grep servicename

לצורך דוגמא אני אבצע חיפוש של כמה שירותים (Services) בלינוקס שלי:



14. איך לבדוק לוגים של שירותים בלינוקס?
בדיקה של לוגים מתבצעת עם הפקודה journalctl בשביל לבדוק לוג מסויים של שירות(Service) נשתמש בפקודה עם  - פרמטר u- שאומר "Units" (כמו שראינו כבר בשימוש באחת הפקודות שלsystemctl).
יחסית הפקודה מאוד פשוטה לשימוש נרשום journalctl -u service_name
אני אבדוק לוג של SSH לדוגמא:


כמובן שיצא המון המון שורות כי זה לוג של כל מה שקשור להתחברות עם SSH, לכן הדבקתי כאן רק חלק.

ניתן לבצע חיפוש בתוך הלוג על ידי לחיצה על כפתור ה"סלאש" - / ופשוט להתחיל לכתוב את מה שרוצים לחפש, לאחר מכן נלחץ Enter.


אני במקרה אבצע חיפוש של השם משתמש lev:


בשביל לצאת מהממשק הזה, נלחץ במקלדת על Q.

15.איך לראות לוגים בזמן אמת?
בלינוקס יש משהו מאוד מעניין וחשוב, אפשר לראות את יצירת הלוג בזמן אמת ! לצורך הדגמא אני אתחבר לאותו המחשב משתי חלונות שונים, בצד ימין, אני כבר מחובר ללינוקס עם SSH ובחלון השמאלי אני מתחבר מחדש, מיד עם ההתחברות והאימות מצד ימין למטה מופיעות שורות חדשות !


אנחנו נבצע את זה עם הפקודה journalctl -u service_name רק שנוסיף בסוף גם את הפרמטר f-, כמובן שצריך להתחבר פעמיים במקרה של SSH בשביל לראות שזה עובד ולהשאיר את החלון עם הלוג פתוח, הפקודה: journalctl -u ssh -f



בחלק הזה למדנו לעבוד עם שירותים (Services) בלינוקס.

כמו תמיד לכל שאלה ניתן לשלוח מייל ל: levl@leidertech.co.il


כמו תמיד, להלן מדריך מצולם: