סיום תהליך בלינוקס - פקודות ps, kill ו-killall. כיצד להרוג את תהליך עצירת התהליך של Linux Centos

06.12.2021

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

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

מצא את ה-PID של תהליך - פקודת pidof

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

כמובן, ניתן לקבוע את ה-PID גם באמצעות חלק עליון. אבל ברוב המקרים, מספר התהליכים גדול מדי (ומשתנה באופן דינמי בחלק העליון), כך שלא כל כך קל לקבוע במהירות ובנכון את ה-PID. בדיוק בשביל זה משמשת פקודת grep. לדוגמה, כדי לסיים את תהליך דפדפן Google Chrome, עליך להפעיל את הפקודה הבאה:

ps axu | grep chrome

$ ps axu | grep chrome
itechf2 20474 2.7 1.5 938416 120136 tty2 Sl+ 11:07 0:00 /opt/google/chrome/chrome

במקרה שלנו, 20474 הוא ה-PID הרצוי. דרך קלה יותר היא להשתמש בפקודה pidof, ועליך לציין את שם התהליך. לדוגמה:

$pidofchrome
20728 20706 20668 20647 20586 20574 20553 20508 20474

תהליך הרג בלינוקס - פקודות kill ו-killall

סיום תהליך במערכת ההפעלה לינוקס, אם אתה יודע את ה-PID שלו, אתה יכול להשתמש בפקודה לַהֲרוֹג. כדאי לדעת ולהבין: פקודת ההרוג נועדה לשלוח אות לתהליך. כברירת מחדל, אם לא נציין איזה אות לשלוח, נשלח אות SIGTERM (מהמילה termination - termination). SIGTERM מורה לתהליך להסתיים. לכל אות יש מספר משלו. SIGTERM הוא מספר 15. ניתן להציג רשימה של כל האותות (והמספרים שלהם) שפקודת ההרוג יכולה להיות מוצגת על ידי הקלדה להרוג -ל . כדי לשלוח אות SIGKILL (מספר 9) לתהליך 2811, הפעל:

יחד עם זאת, ייתכן שהאות SIGTERM לא יעצור את התהליך (לדוגמה, בעת יירוט או חסימת האות), SIGKILL תמיד הורג את התהליך, מכיוון שלא ניתן ליירט אותו או להתעלם ממנו.

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

הפקודה killall, כמו kill, שולחת אות SIGTERM כברירת מחדל. כדי לשלוח אות נוסף, השתמש באפשרות . לדוגמה:

משימות ותהליכים

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

/home/larry# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry#

שים לב שפקודת ברירת המחדל נ.במציג רשימה של תהליכים בלבד שנמצאים בבעלות המשתמש שהפעיל אותו. כדי להציג את כל התהליכים הפועלים במערכת, עליך להנפיק את הפקודה נ.ב.א . עיבוד מספרים(מזהה תהליך, או PID) הרשומים בעמודה הראשונה הם מספרים ייחודיים שהמערכת מקצה לכל תהליך פועל. העמודה האחרונה, שכותרתה COMMAND, מציינת את שם הפקודה שפועלת. במקרה זה, הרשימה מכילה תהליכים שהתחילו על ידי המשתמש לארי עצמו. ישנם תהליכים רבים אחרים הפועלים במערכת, ניתן לראות את הרשימה המלאה שלהם באמצעות הפקודה ps-aux. עם זאת, בין הפקודות המופעלות על ידי המשתמש larry , יש רק bash (הקליפה עבור המשתמש לארי) והפקודה עצמה נ.ב. ניתן לראות שמעטפת ה-bash פועלת במקביל לפקודה נ.ב. כאשר המשתמש הזין את הפקודה נ.ב, פגז ה-bash התחיל לבצע אותו. אחרי הפקודה נ.בסיים את עבודתו (טבלת התהליך מוצגת), הבקרה חוזרת לתהליך ה-bash. לאחר מכן, מעטפת ה-bash מציגה הנחיה ומחכה לפקודה חדשה.

תהליך ריצה נקרא גם מְשִׁימָה(עבודה). המונחים תהליך ומשימה ניתנים להחלפה. עם זאת, מקובל להתייחס לתהליך כאל משימה כאשר הם מתכוונים בקרת עבודה(בקרת עבודה). בקרת עבודה היא תכונת מעטפת פקודה המספקת למשתמש את היכולת לעבור בין מספר עבודות.

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

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

קדמה ורקע

משימות יכולות להיות גם חֲזִית(החזית), או רקע כללי(רקע כללי). בכל זמן נתון יכולה להיות רק עבודה אחת בחזית. המשימה בחזית היא המשימה שאיתה אתה מקיים אינטראקציה; הוא מקבל קלט מהמקלדת ושולח את הפלט למסך (אלא אם כן, כמובן, הפנית מחדש את הקלט או הפלט למקום אחר). לעומת זאת, עבודות רקע אינן מקבלות קלט מהמסוף; ככלל, משימות כאלה אינן מצריכות אינטראקציה עם המשתמש.

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

כדי לשלוט בביצוע תהליכים בלינוקס, מסופק מנגנון העברה. אותות. אות הוא היכולת של תהליכים להחליף הודעות קצרות סטנדרטיות ישירות עם המערכת. הודעת האות אינה מכילה כל מידע, למעט מספר האות (לנוחות, במקום המספר, ניתן להשתמש בשם מוגדר מראש של המערכת). כדי לשלוח אות, מספיק שהתהליך ישתמש בקריאת המערכת לַהֲרוֹג(), וכדי לקבל אות אין צורך בשום דבר. אם תהליך צריך להגיב בצורה מיוחדת לאות, הוא יכול להירשם מטפל, ואם אין מטפל, המערכת תגיב עבורו. בדרך כלל, זה גורם לתהליך שקיבל את האות להסתיים מיד. מטפל איתות מתחיל באופן אסינכרוני, מיד לאחר קבלת האות, לא משנה מה התהליך עושה באותו זמן.

שני אותות - מספר 9 ( לַהֲרוֹג) ו-19 ( תפסיק) - תמיד מעובד על ידי המערכת. הראשון נחוץ כדי להרוג את התהליך בוודאות (ומכאן השם). אוֹת תפסיק משעה תהליך: במצב זה, התהליך אינו מוסר מטבלת התהליך, אך הוא לא מבוצע עד שהוא מקבל אות 18 ( המשך) - לאחר מכן הוא ימשיך לעבוד. במעטפת לינוקס, האות תפסיקניתן להעביר לתהליך פעיל באמצעות רצף בריחה ctrl -ז .

אות מספר 15 ( טווח) משמש להפסקת העבודה. בְּ הַפרָעָהתהליך העבודה (להפריע) מת. הפרעה של עבודות נעשית בדרך כלל על ידי רצף הבקרה ctrl -ג. אין דרך לשחזר משימה שנקטעה. אתה צריך גם להיות מודע לכך שחלק מהתוכניות מיירטות את האות טווח(באמצעות מטפל), כך שהקשה על צירוף המקשים ctrl -ג(ו) אסור להפסיק את התהליך לאלתר. זה נעשה כדי שהתוכנית תוכל להרוס עקבות של עבודתה לפני השלמתה. בפועל, חלק מהתוכניות לא ניתנות להפסקה בדרך זו כלל.

העברה לרקע והורסת עבודות

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

/home/larry# yes y y y y

הרצף של שורות כאלה יימשך ללא הגבלת זמן. אתה יכול להרוג את התהליך הזה על ידי שליחת אות פסיקה, כלומר על ידי לחיצה ctrl -ג. בואו נעשה את זה אחרת עכשיו. כדי למנוע את הצגת הרצף האינסופי הזה על המסך, הפנה מחדש את הפלט הסטנדרטי של הפקודה yes אל /dev/null. כפי שאתה אולי יודע, התקן /dev/null פועל כמו "חור שחור": כל הנתונים שנשלחים למכשיר זה אובדים. עם מכשיר זה זה מאוד נוח להיפטר פלט שופע מדי של כמה תוכניות.

/home/larry# yes > /dev/null

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

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

דרך אחת לשים תהליך ברקע היא להוסיף & לסוף הפקודה. דוגמא:

/home/larry# yes > /dev/null & + 164 /home/larry#

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

אז עכשיו יש לנו את תהליך הפקודה yes שרץ ברקע, שולח ברציפות זרם של y אל /dev/null . כדי לברר את המצב של תהליך זה, עליך לבצע את הפקודה מקומות תעסוקה, שהיא פקודת מעטפת פנימית.

/home/larry# jobs + Running yes >/dev/null & /home/larry#

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

על מנת לשלוח אות לתהליך (לרוב יש צורך פסיקתתפעול העבודה) נעשה שימוש בכלי השירות לַהֲרוֹג. לפקודה זו ניתן מספר עבודה או PID כארגומנט. פרמטר אופציונלי הוא מספר האות שיישלח לתהליך. אות נשלח כברירת מחדל טווח. במקרה שלמעלה, מספר העבודה היה 1, אז הפקודה להרוג %1יבטל את העבודה. כאשר מתייחסים לעבודה על ידי המספר שלה (ולא PID ), אז יש להקדים את המספר הזה בשורת הפקודה בסימן אחוז ("%").

כעת נכניס את הפקודה מקומות תעסוקהשוב כדי לבדוק את התוצאה של הפעולה הקודמת:

/home/larry# jobs הסתיים yes >/dev/null

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

אתה יכול גם להרוג עבודה באמצעות מספר זיהוי התהליך (PID). מספר זה, יחד עם מזהה המשרה, ניתן עם תחילת העבודה. בדוגמה שלנו, ערך ה-PID היה 164, אז הפקודה להרוג 164יהיה שווה ערך לפקודה להרוג %1. בעת שימוש ב-PID כארגומנט לפקודת ה-kill, אינך צריך להזין את התו "%".

השהייה וחידוש עבודות

בואו נתחיל את התהליך תחילה עם הפקודה yes בחזית, כפי שעשינו קודם:

/home/larry# yes > /dev/null

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

עכשיו במקום להפריע למשימה עם צירוף מקשים ctrl -ג, המשימה יכולה לְהַשְׁעוֹת(להשהות, פשוטו כמשמעו - לנתק), שולח לו אות תפסיק. כדי להשהות את המשימה, עליך ללחוץ על צירוף המקשים המתאים, בדרך כלל זה ctrl -ז .

/home/larry# yes > /dev/null ctrl -ז+ הופסק כן >/dev/null /home/larry#

תהליך מושעה פשוט לא פועל. זה לא צורך משאבי CPU. ניתן להתחיל משימה מושעית מאותה נקודה כאילו היא לא הושעתה.

כדי לחדש עבודה בחזית, אתה יכול להשתמש בפקודה fg(מהמילה חזית - חזית).

/home/larry# fg yes >/dev/null

המעטפת תציג שוב את שם הפקודה, כך שהמשתמש יידע איזו משימה הוא מפעיל כעת בחזית. השהה שוב משימה זו על ידי לחיצה על המקשים ctrl -ז, אבל הפעם נריץ אותו ברקע עם הפקודה bg(מהמילה רקע - רקע). זה יגרום לתהליך הנתון לפעול כאילו נעשה שימוש בפקודה עם התו & בסוף בעת התחלתו (כפי שנעשה בסעיף הקודם):

/home/larry# bg + yes $>$/dev/null & /home/larry#

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

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

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

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

/home/larry# yes &

כאן, stdout לא הופנה ל-/dev/null, כך שזרם אינסופי של תווים y יודפס למסך. לא ניתן לעצור את השרשור הזה בגלל שילוב המקשים ctrl -גלא משפיע על עבודות ברקע. כדי לעצור את ההנפקה, עליך להשתמש בפקודה fg, שיביא את המשימה לקדמת הבמה, ולאחר מכן תהרוג את המשימה בשילוב מקשים ctrl -ג .

בוא נעיר הערה נוספת. בדרך כלל צוות fgוצוות bgלהשפיע על העבודות שהושהו לאחרונה (עבודות אלו יסומנו בסמל + ליד מספר המשרה אם תזין את הפקודה מקומות תעסוקה). אם עבודה אחת או יותר פועלות בו-זמנית, ניתן למקם משימות בחזית או ברקע על ידי מתן ארגומנטים של פקודה fgאו פקודות bgמספר הזיהוי שלהם (מזהה משרה). למשל, הפקודה fg %2שם עבודה מספר 2 בחזית, ואת הפקודה bg %3שם עבודה מספר 3 ברקע. השתמש ב-PID כארגומנטים של פקודה fgו bgזה אסור.

יתר על כן, כדי להביא עבודה לקדמת הבמה, אתה יכול פשוט לציין את מספרה. כן, הצוות %2 יהיה שווה ערך לפקודה fg %2 .

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

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

הדרך הקלה והרב-תכליתית ביותר להרוג תהליך בלינוקס היא להשתמש בפקודות מסוף. אפשרות זו תעבוד על כל הפצת לינוקס.

תהליכים בלינוקס

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

לכל התהליכים הפועלים על לינוקס יש את התכונות הבאות:

  1. PID הוא מזהה ייחודי לכל תהליך.
  2. PPID הוא המזהה של תהליך האב.
  3. מזהה המשתמש שהתחיל בתהליך.
  4. עדיפות.
  5. מצב התהליך.

כל תהליך פועל נמצא באחד מהמצבים הבאים:

  • "מְבוּצָע". האות R משמשת לייצוג מצב זה.
  • תהליך שהתחיל פעולת מערכת, כגון קלט או פלט, ומחכה לסיומו נקרא "המתנה". מסומן באות S.
  • תהליך שנעצר על ידי המשתמש או מערכת ההפעלה Linux נמצא במצב Stopped. מצב זה מסומן על ידי T.
  • "זומבים" הם תהליכים שאינם פועלים יותר, אך צורכים משאבי מערכת הפעלה. מסומן באות Z.
  • לא ניתן לסיים תהליך מתמשך עד לסיום פעולת ה-DMA. התהליך מסומן בסמל D.

חיפוש תהליך

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

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

  • PID - מספר תהליך ייחודי;
  • USER - התחברות של המשתמש שהתחיל תהליך זה;
  • יחסי ציבור - עדיפות תהליך בזמן נתון;
  • NI - עדיפות שהוקצתה לתהליך על ידי פיקוד NICE;
  • S הוא המצב של תהליך זה;
  • %CPU - כמה זמן CPU לוקח תהליך זה (באחוזים);
  • %MEM - כמות ה-RAM שתופס תהליך זה (באחוזים);
  • TIME+ - כמה זמן עבר מאז תחילת התהליך;
  • COMMAND היא התוכנית שהתחילה את התהליך.

המידע המסופק על ידי הפקודה העליונה מוצג במיון לפי כמות זמן המעבד בשימוש (עמודת %CPU). המשתמש יכול לשנות את סדר המיון:

  • מיין תהליכים לפי כמות ה-RAM התפוס (עמודה %MEM) עליך ללחוץ על צירוף המקשים Shift + M;
  • מיון לפי מספר תהליך (עמודת PID) באמצעות השילוב Shift+N;
  • מיון לפי זמן עבודה (עמודה TIME+) - Shift+T.
  • חזרה למיון המקורי לפי רמת הטעינה של המעבד - הקש על השילוב Shift + P.

שימוש בפקודה ps

הפקודה העליונה יכולה לקבל הרבה מהמידע שאתה צריך, אבל זו לא הדרך הנוחה ביותר לקבל את המידע שאתה צריך לגבי התהליך שאתה צריך. כדי להימנע מחיפוש אחר התהליך הרצוי, ניתן להשתמש בפקודה ps ולסנן את הרשימה באמצעות הפקודה greep. לדוגמה, אם אתה רוצה למצוא את כל התהליכים הקשורים לדפדפן האופרה הפועל, אתה יכול להקליד ps axu | grep Mozilla.

לפקודת ps יש את האפשרויות הבאות:

  • a - הצג תהליכים עבור כל המשתמשים;
  • u - להציג את המשתמש שהוא הבעלים של התהליך;
  • x - הצג תהליכים שאינם מחוברים למסוף. אפשרות זו חשובה כאשר מחפשים מידע על יישום גרפי.

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

דרכים אחרות לחפש תהליך

כדי למצוא את ה-PID של תהליך לפי שמו, יש את הפקודה pidof. הפורמט לשימוש בו הוא: pidof+שם תוכנית. לדוגמה, כדי למצוא את כל ה-PIDs הקשורים לתוכנית Opera, תקליד: pidof Opera.

במקרים מסוימים, קורה שהתוכנית השלימה את ביצועה, אך לא שחררה את יציאת הרשת. כדי לקבל מידע, במקרה זה, עליך להזין את פקודת ה-fuser: fuser -vn tcp 80. כאשר 80 הוא מספר היציאה התלויה. לאחר מכן, אתה יכול להרוג את תהליך לינוקס לפי יציאה.

לאחר שתדעו את ה-PID של התהליך ואת שמו, תוכלו להמשיך לפעולת סיום אפליקציה מיותרת. לשם כך, נעשה שימוש בשתי פקודות: kill - kill the process by id בלינוקס ו-killall - סיים את התוכנית לפי שם.

המבנה של פקודת ההרוג הוא: kill SIGNAL PID. כאשר SIGNAL הוא האות שיש לשלוח ו-PID הוא מזהה התהליך.

פרמטר סיום התהליך SIGNAL הוא 9 (SIGKILL). לפיכך, על מנת להרוג תהליך על ידי pid בלינוקס, עליך להזין את הפקודה בקונסולה: kill -9 9578. כאשר 9578 הוא מספר תהליך ייחודי.

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

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

כיצד להרוג תהליך לפי שם בלינוקס

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

נכון, פקודה זו לא תמיד מסיימת את התהליכים הקשורים לתוכנית המושמדת. אם לאחר הפעלת הפקודה לעיל תקליד ps aux | grep Opera ותראה שחלק מהתהליכים עדיין פועלים, עדיף להרוג אותם עם אפליקציית ה-kill system.

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

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

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

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

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

כשאתה עובד עם אובונטו לינוקס, כנראה שכבר יש לך שאלות:

כיצד לקבוע את ה-PID כדי להרוג לאחר מכן את התהליך/יישום

אם אתה לא רוצה להפעיל את הפקודה חלק עליוןאו אנלוגי אחר חזק יותר htop, ואז טרח לחפש את המזהה של מזהה תהליך זה או אחר, יש דרך קלה יותר לצאת / פתרון למצוא PIDתהליך, אתה יכול להשתמש בפקודה " pidof"או" נ.ב".

נניח שעלינו לברר את מזהה התהליך של אפליקציית Google Chrome, מה אנחנו עושים במצב זה, פתח את המסוף Ctrl + Alt + T ובצע את הפקודה בטרמינל:

Pidof כרום

אנחנו מקבלים את הפלט:

9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

כמעט מוכן, קבענו את ה-PID, על איך להרוג את התהליך, קרא להלן.

כיצד להרוג תהליך בלינוקס על ידי PID

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

סודו להרוג 9497 9183 9123 8815 8788 6042 6033 5938 5916 5911 5908 5900 5892 5836 5831 5819

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

sudo ps axu

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

אתה יכול גם להשתמש בפקודה נוספת כדי למצוא את מזהה התהליך של האפליקציה שברצונך להרוג:

Ps-A | grep -i name-app

במקום שם-אפליקציה אנו כותבים את שם האפליקציה, אל תזין את השם המלא באופן ידני, השתמש בזיהוי אוטומטי באמצעות המקשים " TAB". כתוצאה מכך, פקודה זו תציג את זמן הריצה של התהליך הנדרש ובהתאם, שלו PID, שבו אתה יכול להשתמש כדי להרוג, בוא נבדוק את הפקודה הרצה בטרמינל:

Ps-A | grep -i סקייפ

נקבל את התוצאה הבאה:

9257? סקייפ 00:00:57

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

כיצד להשתמש בפקודה Kill בלינוקס

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

תעודה מזהה התקבלה ועכשיו נוכל להרוג את האפליקציה:

סודו להרוג 9257

זהו, האפליקציה מתה.

איך להרוג תהליך בלינוקס לפי שם

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

sudo killall סקייפ

אותה אפשרות:

sudo killall -s 9 סקייפ

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

פקודת המוות שאסור לבצע בטרמינל

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

הנה דוגמה לפקודה מוות:

סודו הרג -9 -1

פקודה זו תהרוג את כל התהליכים הפועלים כעת. לא הייתי ממליץ לך לבצע זאת, מכיוון שההשלכות יכולות להיות בלתי צפויות וסביר להניח שתצטרך להפעיל מחדש את המערכת ללא ממשק גרפי. במקרה שהממשק הגרפי נכשל פתאום, פתח את הטרמינל באמצעות הפקודות CTRL+ALT+F1, כל חלון חדש נפתח באותה אנלוגיה, הוא רק משנה את F1 ל-F2 וכן הלאה.

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

גבר נ.ב גבר grep man pidof man kill man killall

זה מסיים את החומר הקצר שלנו, אם משהו לא ברור לך, שאל בהערות לחומר למטה.

יש להשתמש בארגומנט -9 (או KILL) לפקודת kill רק במערכות תואמות POSIX אם יש צורך מוחלט. למה? לא ניתן לטפל באות KILL על ידי התהליך. המשמעות היא שלאחר סיום תהליך עם kill -9, תהליכי צאצא יישארו בזיכרון ויהפכו ל"יתומים" (יתומים), מערכת הקבצים תהיה עמוסה בקבצים זמניים, מקטעי זיכרון משותפים יהיו פעילים, שקעים ייתלו, ו הפונקציה atexit(3) לא תבוצע כלל. כתוצאה מכך, קיים סיכון להיתקל בבעיות בלתי צפויות וקשות לניפוי באגים.

השתמש במקום זאת באות ברירת המחדל TERM, והשתמש ב-KILL רק אם אותות פחות בעייתיים יתבררו כלא יעילים:

להרוג 6738 דולר
$ kill -INT 6738
$ kill -HUP 6738
$ kill -KILL 6738

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

שימוש ברירת המחדל ב-kill -KILL מקובל כאשר עוסקים ביישום בעייתי, למשל גרסאות ישנות יותר של Netscape יסתיימו לעתים קרובות רק עם האות KILL. עם זאת, זהו חריג נדיר לכלל: השתמש ב-KILL על ורק ביישומים המוכרים.

בעיות המתרחשות בעת סיום תהליכים

שליחת אותות שונים ברצף עלולה לגרום לבעיות הבאות: ראשית, התהליך עשוי להימשך שניות, או אפילו עשרות שניות, להסתיים בחן. מוצר אחד שהשתמשתי בו לקח יותר מ-30 שניות להשלים כהלכה לאחר קבלת האות TERM. למרבה המזל, תכונה זו התגלתה במהלך הבדיקה, ולכן נכתב תסריט מתאים למקרה זה. שנית, לפעמים יש מצבים שבהם התהליך הישן הסתיים, בעוד שהתהליך החדש לקח את הזיהוי שלו במרווח בין האותות TERM ו-KILL. מערכות עם תחלופת תהליכים גבוהה ומערכות שבהן הליבה מקצה PID באופן אקראי, כגון OpenBSD, נמצאות בסיכון מיוחד. בדיקת שם התהליך או ה-PPID שלו לא תמיד עוזרת, מכיוון שהתהליך החדש יכול להיות מזלג של אותו הורה ויש לו אותו שם, כך שסקריפטים פרנואידים במיוחד עשויים לבדוק גם את זמן יצירת התהליך או מטא נתונים אחרים לפני שליחת האות. אולי המצבים האלה נדירים, אבל כדאי לשקול אותם אם אתה צריך להתמודד עם תהליך קריטי.

אותות סיום תהליך

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

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

למידע נוסף על אותות סיום תהליך, ראה