שלטון Linux הורג תהליכים באמצעות ps, pgrep, pkill ועוד

ניהול תהליכים ב-Linux עשוי להיראות מסויט למנהל מערכת (sysadmin) חדש בהתחלה. אך עם קצת הסבר והדגמה, תלמד כיצד למצוא ולבצע תהליכי סיום ב-Linux, זה פשוט עניין של שימוש בכלי שורת פקודה כמו ps ו־kill.

במאמר זה, תלמד פקודות לאיתור תהליכים רצים ותהליכים תקלים, להרוג (לסיים) תהליכים רצים, למצוא תהליכים ברקע, ועוד הרבה יותר על כל מערכת ההפעלה של Linux.

עד סוף המאמר, תוכל לנהל תהליכים בהתבסס על מספרי זיהוי תהליך (PIDs) משורת הפקודה כמו מקצוען של Linux. המשך לקרוא כדי ללמוד את כל פקודות ניהול התהליכים ב-Linux!

דרישות קדם

מאמר זה יהיה הסבר על כיצד לנהל תהליכים ב-Linux. אם ברצונך להיות פעיל, יהיה עליך להתקין את המערכות הבאות:

  • A Linux host, which can be a virtual machine or a physical machine.
  • כדי לנסות את הדוגמאות של PowerShell, התקן את PowerShell 7.1.1 על מארח Linux.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

ההפצה של Linux שתבחר להשתמש בה, זו בחירה שלך. המאמר הזה יתבסס על Ubuntu 20.04 LTS. עם זאת, הפקודות הן תקניות למערכת ההפעלה של Linux.

מוכן להתחיל? נהדר, בוא נתחיל.

ניהול תהליכים ב-Linux

באירועים נדידים, ייתכן שתתקל במקרה בו עליך לעצור תהליך פועל במערכת Linux. לדוגמה, ייתכן שיש לך תסריט Bash הרץ על פי תזמון. תסריט זה מוגדר להרוץ כמשתמש אחר דרך משרת cron (מתזמן תהליך של Linux).

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

בקטעים הבאים, תלמד על פקודות שמשמשות לאיתור ולסיום או הרג של תהליכים במערכת Linux. כל קטע יבנה על הקודם. תלמד על פקודות ps, top, pgrep, kill, ו־pkill, שכלן נטיית Linux.

כתוספת, פקודות שקולות ב-PowerShell, Get-Process ו־Stop-Process, כלולות אם פקודות ה-Linux אינן בסגנון שלך.

כלי לאיתור תהליכים

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

שימוש בפקודה ps להצגת מידע על התהליך

הפקודה ps מציגה מידע הקשור לתהליכים פעילים במערכת Linux. באפשרותך לאתר תהליך שרץ ואף תהליכי רקע עם הפקודה ps.

הפקודה ps, בברירת מחדל, תציג את כל התהליכים עבור זיהוי משתמש פעיל (EUID) של המשתמש הנוכחי. הרצת הפקודה ps, כפי שמוצג למטה, תחזיר כל תהליך רץ שבאפשרות המשתמש שלך לסיים.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

איתור מידע נרחב על תהליכים באמצעות הפקודה top

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

כאשר אתה מפעיל את הפקודה top, תראה יותר מפיד. כלולים בפרטי התהליך אחוזי CPU וזיכרון, ערכי נחמד (עדיפות תהליך לסידור CPU), ועדיפות התהליך (PR) המוגדרת על ידי ליבת Linux.

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

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop הוא גרסה משופרת של top הכוללת מגוון שיפורים, כגון פלט צבעוני לטרמינל.

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

top -p 2113
The top command displaying information on only one PID, 2113.

אולי תרצה להציג את כל תהליכי הריצה עבור שם משתמש מסוים. פקודת top מציעה את המפתח u כדי להציג רק תהליכי משתמש מסוימים. כפי שמוצג בדוגמה למטה, מזהים תהליכים (PIDs) התואמים רק את זהות המשתמש bkindle מוצגים.

top -u bkindle
The top command displaying only processes for the user bkindle.

איתור מזהי תהליכים מסוימים עם פקודת pgrep

במקור פקודת Solaris, pgrep נועדה לשימוש ב-Linux. על ידי שילוב יכולת החיפוש של פקודת grep וניהול התהליכים של ps, pgrep מציעה גמישות באיתור התהליך המדויק למטרה.

למרות ש- ps מציגה מידע נוסף, pgrep מותאמת להחזיר רק את מזהי התהליכים שמתקבלים בתוצאה. pgrep עוזרת באיתור התהליך באמצעות ה- הרבה פרמטרי חיפוש זמינים. בדוגמה הבאה, מוצגת פקודת pgrep המחפשת תהליך התואם את vmtoolsd.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

באופן דומה, סוֹמֵן מזהה משתמש עם המתג u כדי לאחזר רק תהליכים הקשורים למשתמש הספציפי הזה. כפי שמוצג למטה, מוחזר PID יחיד עבור המשתמש bkindle והתהליך vmtoolsd.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

מציאת תהליכים בעזרת Get-Process של PowerShell ב-Linux

פקודות טיפוליות סטנדרטיות ב-Linux עובדות נהדר, אך האם ידעת ש-PowerShell מסוגלת לנהל תהליכי Linux גם? תכליתו של הפקודה Get-Process דומה לפקודת ps ב-Linux ומחזירה מידע על התהליכים. לדוגמה, אולי תרצה למצוא את כל התהליכים הפועלים של המשתמש הנוכחי, bkindle. כפי שמוצג למטה, מצא את כל תעודות הזיהוי (מתוייגות בתגית ID על ידי Get-Process) של המשתמש bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

קשור: איך להשתמש ב-PowerShell Where-Object כדי לסנן את כל הדברים

לאחר שנלמד איך לאתר תהליכים שונים, נמשיך ונגלה את כל הדרכים לסיים או להרוג תהליך ב-Linux!

הריגת תהליכים באמצעות פקודות הריגה ב-Linux

בקטעים הקודמים, למדת כיצד לאתר את ה-PID של התהליך שברצונך לשלוח אליו אות הריגה באמצעות פקודות Linux טבעיות ו-PowerShell. הקטעים הבאים יסבירו כיצד להשתמש בתוכניות kill ו-pkill, את האותות המשויכות להם ואת המפסקים בשורת הפקודה.

אותות Linux וניהול תהליכים

אותות הם השיטה שבה משתמשת לינוקס כדי לתקשר עם תהליכים הפועלים במערכת ההפעלה. שלושה אותות עיקריים שהפקודה kill משתמשת בהם כדי לסיים תהליכים הם:

  • 1 (SIGHUP) – סוגר תוכניות אינטראקטיביות וגורם לדמונים (שירותים ברקע) לקרוא מחדש את קבצי התצורה שהתהליך משתמש בהם.
  • 9 (SIGKILL) – כובה את התהליך מבלי לבצע משימות יציבה לסגירה.
  • 15 (SIGTERM) – מאפשר לתהליך לסיים בצורה יציבה, כמו סגירת קבצים פתוחים בסיום. זהו האות הדיפולטית המשתמשת כאשר לא צויין מספר כאשר משתמשים בפקודת ההורג.

בעוד שמאמר זה מתמקד רק בשלושת האותות העיקריים המשמשים להורג תהליכים, ישנם סך כלל 64 אותות זמינים. ניתן להשתמש ב־kill -l כדי לקבל את רשימת האותות והמספרים התואמים שלהם.

Great video on understanding process signals

עכשיו שהבנת את שלושת האותות העיקריים שמשמשים לסיום תהליך, למד איך להורג תהליך באיזורים הבאים.

שימוש בפקודה kill לסיום תהליך

בדוגמה הבאה, תשתמש בפקודה kill. הנניח לרגע שאתה מריץ מופע PowerShell, בשם pwsh, וה־PID המוקצה הוא 22687. דרך אחת לסיים את התהליך הוצגה למטה.

  1. השתמש ב־pgrep pwsh כדי לקבוע את ה־PID של התהליך pwsh, שישמש בפקודת ההורג kill.
  2. Use kill -s TERM 22687 לסיים את התהליך של pwsh בצורה יפה. הפקודה TERM מקשרת לאות SIGTERM 15 ומסומנת באמצעות הפרמטר s של פקודת kill.
  3. השתמש ב־top, ps, או pgrep לבדיקת ה־PID כדי לוודא שהוא לא מופיע יותר.

למטה מוצג דוגמה לתהליך זה מתוך טרמינל bash ב-Ubuntu 20.04 LTS.

Using kill and associated commands to terminate the pwsh process.

פקודת killall תסיים את כל התהליכים לפי שם במקום לפי PID, דבר שיכול להפוך את הפקודה להורסתית אם משתמשים בה באופן בלתי זהיר. אם בחרת להשתמש בפקודה זו, השתמש באפשרות i כדי לגרום לפקודה לבקש אישור.

הרג של תהליכים לפי שם באמצעות pkill

יתכן ששמת לב שפקודת kill עובדת רק עם מזהים של תהליכים. זה יכול להפוך את תהליך הסיום של תהליך לתהליך מרובה צעדים. הפקודה pkill , הכלולה בחבילות procps ו־procps-ng, סוגרת תהליך על פי שם חיפוש.

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

פקודת pkill אינה זמינה, כברירת מחדל, ב- Ubuntu 20.04 LTS. עליך להוריד ולהתקין את היישום. כדי לעשות זאת, הרץ את sudo apt install mcollective-plugins-process -y.

כדי להרוג תהליך באמצעות pkill, בצע את השלבים הבאים:

  1. השתמש ב- ps כדי לוודא שיישום הננו (עורך טקסט מבוזר לשורות פקודה) רץ כרגע. שלב זה אופציונלי, אך זהו בדיקת בטיחות לפני הריגת תהליך.
  2. השתמש ב- pkill -9 nano כדי לסיים באופן חזק יישום הננו.

הנה דוגמה לתהליך מעלה מטריקס של Ubuntu 20.04 LTS bash terminal.

Using the pkill command to forcefully terminate the nano process.

הריגת תהליך בעזרת פקודת Top

כאשר אתה מפעיל את הפקודה top כדי לצפות בתהליכים פועלים, תוכל להרוג תהליך נתון בעזרת מקש ה־k. תראה לך הודעת פנימית שמבקשת את מזהה התהליך שברצונך להרוג.

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

Use top to specify a process to terminate using the k keystroke.

באופן הבא, למד דרך אחרת אחת להשתמש בפקודות נייטיביות של Linux בעזרת פקודת הפוורשל PowerShell Stop-Process!

שימוש בפקודת PowerShell Stop-Process לסיים תהליכים

אם פקודות ה-Linux המובנות אינן בסגנון שלך, PowerShell יכולה לספק לך את הכיסוי! כמו גם עם הפקודה kill, אתה יכול לסיים תהליכים באמצעות פקודת Stop-Process ב-Linux. פעם נוספת, התעלם מכך שאתה מפעיל תהליך של PowerShell pwsh.

  1. מצא את ה-PID באמצעות Get-Process -ProcessName 'pwsh' ושים לב ל-PIDs שברצונך לסיים.
  2. השתמש ב-Stop-Process -Id 29992,30014 כדי לסיים את התהליכים המרובים שהוחזרו.
  3. השתמש ב-Get-Process -ProcessName 'pwsh' ווודא שה-PIDs, 29992 ו־30014, אינם מופיעים עוד ברשימה, המשמעות שהם סוגרו.

בנוסף, אפשר להשתמש ב-Get-Process ובשיטת ה-kill כדי לסיים תהליכים יחידים או מרובים: (Get-Process -Id [PID]).Kill() או (Get-Process -Id [PID1,2,3,4]).Kill().

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

למטה נתונה דוגמה לתהליך הנ"ל מתוך טרמינל bash של Ubuntu 20.04 LTS.

Using PowerShell, Stop-Process to kill processes in Linux.

שלבים הבאים

אתה כעת צריך לדעת את הדרכים הרבות למצוא ולסיים תהליכים ב-Linux! לאתגר הבא שלך, נסה להרוג תהליכים מרחוק באמצעות חיבורי SSH או להרוג תהליכים שעשויים לרוץ בקונטיינרים.

קשור: איש חלונות בעולם של Linux: הגדרת SSH ב-Linux

Source:
https://adamtheautomator.com/linux-kill-process/