אות - Linux/Unix Command

לינוקס תומך הן באותות אמינים של POSIX (להלן, "אותות סטנדרטיים") והן באותות POSIX בזמן אמת.

שימוש באותות בלינוקס

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

התחל בחיפוש אחר תהליך שאתה רוצה לסגור. אתה יכול לעשות זאת עם:

ps aux | grep -i 

אז, אם אתה רוצה לסגור את Firefox משורת הפקודה, הזן:

ps aux | grep -i firefox

תקבל רשימה ענקית של תהליכים פיירפוקס כי זה יישום מרובה הליכי. חפש את תהליך הבסיס עבור /usr/lib/firefox. בדרך כלל זה הראשון.

רשימת תהליכי לינוקס פיירפוקס

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

pgrep firefox. 

מזהה התהליך הנמוך ביותר יהיה תהליך הבסיס שאתה צריך.

Linux pgrep Firefox

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

להרוג -SIGTERM 4790. 
Linux SIGTERM Firefox

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

להרוג -15 4790

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

להרוג 4790

תקבל את אותה תוצאה בדיוק.

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

להרוג -ל
רשימת אותות לינוקס

כן, יש הרבה. למרבה המזל, לא תיגע ברוב המכריע, אלא אם תתחיל לפתח או לכתוב סקריפטים לניהול מערכת. לעתים קרובות יותר מאשר לא, כאשר SIGTERM לא מצליח לעצור תהליך לא מגיב, אתה הולך לחפש את המקבילה ללינוקס של Ctrl+Alt+Delete, SIGKILL.

בניגוד למנהל התהליך הידוע לשמצה Ctrl+Alt+Delete, SIGKILL למעשה עובד. למעשה, זה נועד להתעלם מכל הגורמים האחרים ולהוריד את התהליך הפוגע, לא משנה מה. זה גם אומר ש-SIGKILL יכול להיות מסוכן אם אתה טועה בתהליך.

התחל בדיוק באותו אופן, על ידי חיפוש מזהה התהליך.

pgrep firefox

כעת, במקום להשתמש ב-SIGTERM כדי לעצור את התהליך, השתמש ב-SIGKILL ההרסני יותר.

להרוג -SIGKILL 4790

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

Linux SIGKILL Firefox

בדיוק כמו עם SIGTERM, יש מספר שמתאים ל-SIGKILL. במקרה הזה, זה 9.

להרוג -9 4790

בדיוק כמו בעבר, התהליך אמור להיות מת כמעט מיד.

אתה גם צריך להיות מודע SIGINT. זוהי פסיקה מהמקלדת, וזו יותר פקודה ממה שאתה חושב בשורת הפקודה. כשאתה לוחץ Ctrl+C כדי לעצור תהליך מחלון מסוף, אתה למעשה מנפיק SIGINT. הקוד שלו הוא 2, ואתה יכול להשתמש בו בדיוק כמו האחרים עם פקודת ההרוג.

להרוג -2 4790

זה לא כל כך נפוץ מכיוון שיש לך הרבה יותר סיכוי ללכת עם Ctrl+C, אבל טוב להיות מודע לזה.

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

הפרטים הטכניים

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

אותות סטנדרטיים

לינוקס תומכת באותות הסטנדרטיים המפורטים להלן. מספר מספרי אותות תלויים בארכיטקטורה, כפי שמצוין בעמודה "ערך". (כאשר ניתנים שלושה ערכים, הראשון תקף בדרך כלל עבור אלפא ו-sparc, האמצעי עבור i386, ppc ו-sh, והאחרון עבור mips. A - מציין שחסר אות בארכיטקטורה המתאימה.)

הערכים בעמודה "פעולה" בטבלה מציינים את פעולת ברירת המחדל עבור האות, באופן הבא:

טווח:פעולת ברירת המחדל היא לסיים את התהליך.

Ign:פעולת ברירת המחדל היא התעלמות מהאות.

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

תפסיק:פעולת ברירת המחדל היא לעצור את התהליך.

ראשית, האותות המתוארים בתקן POSIX.1 המקורי.

אוֹת ערך פעולה תגובה
או מוות של תהליך שליטה
SIGINT 2 טווח הפרעה מהמקלדת
SIGQUIT 3 הליבה צא מהמקלדת
SIGILL 4 הליבה הוראה לא חוקית
SIGABRT 6 הליבה אות ביטול מ לְהַפִּיל(3)
SIGFPE 8 הליבה חריג נקודה צפה
SIGKILL 9 טווח אות הריגה
SIGSEGV 11 הליבה הפניה לא חוקית לזיכרון
SIGPIPE 13 טווח צינור שבור: כתוב לצינור ללא קוראים
SIGALRM 14 טווח אות טיימר מ אזעקה(2)
SIGTERM 15 טווח אות סיום
SIGUSR1 30,10,16 טווח אות בהגדרת משתמש 1
SIGUSR2 31,12,17 טווח אות מוגדר על ידי משתמש 2
SIGCHLD 20,17,18 Ign הילד הפסיק או הופסק
SIGCONT 19,18,25 המשך אם נעצר
SIGSTOP 17,19,23 תפסיק עצור תהליך
SIGTSTP 18,20,24 תפסיק הפסק להקליד ב-tty
SIGTTIN 21,21,26 תפסיק קלט tty עבור תהליך הרקע
SIGTTOU 22,22,27 תפסיק פלט tty עבור תהליך רקע

האותות SIGKILL ו SIGSTOP לא ניתן לתפוס, לחסום או להתעלם.

לאחר מכן האותות אינם בתקן POSIX.1 אלא מתוארים ב-SUSv2 ו-SUSv3 / POSIX 1003.1-2001.

אוֹת ערך פעולה תגובה
SIGPOLL טווח אירוע שניתן לסקר (Sys V). מילה נרדפת של SIGIO
SIGPROF 27,27,29 טווח פג תוקף הטיימר ליצירת פרופילים
SIGSYS 12,-,12 הליבה טיעון רע לשגרה (SVID)
SIGTRAP 5 הליבה מלכודת עקבות/נקודת שבירה
סיגור 16,23,21 Ign מצב דחוף בשקע (4.2 BSD)
SIGVTALRM 26,26,28 טווח שעון מעורר וירטואלי (4.2 BSD)
SIGXCPU 24,24,30 הליבה חרגת ממגבלת הזמן של המעבד (4.2 BSD)
SIGXFSZ 25,25,31 הליבה חרגת ממגבלת גודל הקובץ (4.2 BSD)

עד וכולל Linux 2.2, התנהגות ברירת המחדל עבור SIGSYS, SIGXCPU, SIGXFSZ, וכן (על ארכיטקטורות שאינן SPARC ו-MIPS) SIGBUS היה לסיים את התהליך (ללא dump core). (בכמה יוניסים אחרים פעולת ברירת המחדל עבור SIGXCPU ו SIGXFSZ הוא לסיים את התהליך ללא dump core.) Linux 2.4 תואם את דרישות POSIX 1003.1-2001 עבור אותות אלה, ומסיים את התהליך עם dump core.

לאחר מכן, אותות שונים אחרים.

אוֹת ערך פעולה תגובה
SIGEMT 7,-,7 טווח
SIGSTKFLT -,16,- טווח תקלת ערימה במעבד שותף (לא בשימוש)
SIGIO 23,29,22 טווח קלט/פלט אפשרי כעת (4.2 BSD)
SIGCLD -,-,18 Ign מילה נרדפת ל-SIGCHLD
SIGPWR 29,30,19 טווח הפסקת חשמל (מערכת V)
SIGINFO 29,-,- מילה נרדפת ל-SIGPWR
SIGLOST -,-,- טווח נעילת הקובץ אבד
SIGWINCH 28,28,20 Ign אות שינוי גודל חלון (4.3 BSD, Sun)
חתום -,31,- טווח אות לא בשימוש (יהיה SIGSYS)

(אות 29 הוא SIGINFO / SIGPWR על אלפא אבל SIGLOST על ספסל.)

SIGEMT אינו מצויין ב-POSIX 1003.1-2001, אך עם זאת מופיע ברוב יוניסים אחרים, כאשר פעולת ברירת המחדל שלו היא בדרך כלל לסיים את התהליך עם dump core.

SIGPWR (שלא מצוין ב-POSIX 1003.1-2001) בדרך כלל מתעלמים כברירת מחדל באותם יוניסים אחרים שבהם הוא מופיע.

SIGIO (שלא מצוין ב-POSIX 1003.1-2001) מתעלמת כברירת מחדל במספר יוניסים אחרים.

אותות בזמן אמת

לינוקס תומכת באותות בזמן אמת כפי שהוגדרו במקור בהרחבות בזמן אמת של POSIX.4 (ונכללות כעת ב-POSIX 1003.1-2001). לינוקס תומכת ב-32 אותות בזמן אמת, ממוספרים מ-32 (SIGRTMIN) עד 63 (SIGRTMAX). (תוכניות צריכות להתייחס תמיד לאותות בזמן אמת באמצעות סימון SIGRTMIN+n, מכיוון שטווח מספרי האות בזמן אמת משתנה בין יוניס.)

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

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

אותות בזמן אמת נבדלים על ידי הדברים הבאים:

  1. ניתן לתאר מופעים מרובים של אותות בזמן אמת. לעומת זאת, אם מספר מופעים של אות סטנדרטי נמסרים בזמן שהאות הזה חסום כעת, אז רק מופע אחד מונח בתור.
  2. אם האות נשלח באמצעות סימון(2), ניתן לשלוח ערך נלווה (או מספר שלם או מצביע) עם האות. אם תהליך הקבלה מגדיר מטפל לאות זה באמצעות ה- SA_SIGACTION דגל ל חתימה(2) אז הוא יכול להשיג את הנתונים האלה באמצעותsi_value שדה של siginfo_t המבנה הועבר כארגומנט השני למטפל. יתר על כן, ה si_pid ו si_uid ניתן להשתמש בשדות של מבנה זה כדי לקבל את ה-PID ומזהה המשתמש האמיתי של תהליך שליחת האות.
  3. אותות בזמן אמת מועברים בסדר מובטח. אותות מרובים בזמן אמת מאותו סוג נמסרים בסדר שנשלחו. אם אותות שונים בזמן אמת נשלחים לתהליך, הם נמסרים החל מהאות עם המספרים הנמוכים ביותר. (כלומר, לאותות עם מספר נמוך יש עדיפות גבוהה ביותר).

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

לפי POSIX, יישום צריך לאפשר לפחות _POSIX_SIGQUEUE_MAX (32) אותות בזמן אמת להיות בתור לתהליך. עם זאת, במקום להציב מגבלה לכל תהליך, לינוקס מטילה מגבלה מערכתית על מספר אותות בזמן אמת בתור עבור כל התהליכים. ניתן לצפות במגבלה זו (ועם הרשאות) לשנות באמצעות ה- /proc/sys/kernel/rtsig-max קוֹבֶץ. קובץ קשור,/proc/sys/kernel/rtsig-max, ניתן להשתמש כדי לגלות כמה אותות בזמן אמת נמצאים כרגע בתור.

תואם ל.

POSIX.1.

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