ראשית הוא ההורה של כל התהליכים לינוקס. זה התהליך הראשון להתחיל כאשר המחשב המגפיים מעלה, והוא פועל עד שהמערכת נסגרת. זהו האב הקדמון של כל התהליכים האחרים.
תפקידו העיקרי הוא ליצור תהליכים מתוך סקריפט המאוחסן בקובץ / etc / inittab. קובץ זה בדרך כלל מאחסן רשומות שגורמות ל- Init להשריץ את ה- gettys בכל שורה שבה משתמשים יכולים להיכנס. היא שולטת גם בתהליכים אוטונומיים הנדרשים על-ידי מערכת מסוימת.
Runlevels
א רמתהפעלה היא תצורת תוכנה של המערכת המאפשרת רק קבוצה נבחרת של תהליכים לבצע. התהליכים שנולדו על ידי ייזום עבור כל אלה runlevels מוגדרים בקובץ / etc / inittab. ראשוני יכול להיות אחד מתוך שמונה runlevels: 0 עד 6 ו- S או s. Runlevel משתנה על ידי בעל משתמש מועדף להפעיל Telinit, אשר שולח אותות מתאימים כדי Init, אומר את זה runlevel כדי לשנות.
Runlevels 0, 1, ו 6 שמורות. Runlevel 0 משמש כדי לעצור את המערכת, runlevel 6 משמש אתחול מחדש של המערכת, ו runlevel 1 משמש כדי לקבל את המערכת למצב משתמש יחיד. Runlevel S לא נועד לשמש ישירות אלא על ידי סקריפטים אשר מבוצעות בעת הכניסה runlevel 1.
Runlevels 7 עד 9 תקפים גם, אם כי לא מתועד היטב כי גרסאות "יוניקס" המסורתית לא להשתמש בהם. Runlevels S ו S זהים. פנימי, הם כינויים עבור runlevel אותו.
אתחול
לאחר ההתחלה הראשונית כצעד האחרון של רצף האתחול של הליבה, הוא מחפש את הקובץ / etc / inittab כדי לראות אם יש ערך מסוג initdefault . ערך initdefault קובע את מערכת ההפעלה הראשונית של המערכת. אם אין ערך כזה (או לא / etc / inittab בכלל), יש להפעיל את runlevel במסוף המערכת.
Runlevel S או s לוקח את המערכת למצב משתמש יחיד ואינו דורש קובץ / etc / inittab. במצב משתמש יחיד, פגז שורש נפתח על / dev / מסוף.
בעת כניסה למצב משתמש יחיד, init קורא את המצבים ioctl של המסוף מ /etc/ioctl.save. אם קובץ זה אינו קיים, init מאתחל את השורה ב 9600 baud ועם הגדרות CLOCAL. כאשר init משאיר מצב משתמש יחיד, הוא מאחסן את ההגדרות של ioctl במסוף זה, כך שהוא יוכל לעשות בהן שימוש חוזר עבור ההפעלה הבאה של משתמש יחיד.
בעת כניסה למצב מרובה משתמשים בפעם הראשונה, Init מבצע את ערכי האתחול והאתחול כדי לאפשר למערכות הקבצים לעלות לפני שהמשתמשים יוכלו להיכנס. לאחר מכן, כל הערכים התואמים את runlevel מעובדים.
כאשר מתחילים תהליך חדש, ראשית בודק אם הקובץ / etc / incriptcript קיים. אם כן, הוא משתמש בסקריפט זה כדי להתחיל את התהליך.
בכל פעם שילדים מסתיימים, Init מתעדת את העובדה ואת הסיבה שהיא מתה ב- / var / run / utmp ו / var / log / wtmp, בתנאי שקיימים קבצים אלה.
שינוי Runlevels
לאחר שהיא פורצת את כל התהליכים שצוינו, Init מחכה שאחד מתהליכי הצאצא שלה ימות, אות Powerfail, או עד שיאותת על ידי Telinit לשנות את הרצת המערכת. כאשר אחד משלושת התנאים האלה מתרחשת, זה מחדש בוחן את / etc / קובץ inittab. ניתן להוסיף ערכים חדשים לקובץ זה בכל עת. עם זאת, init עדיין מחכה לאחד משלושת התנאים לעיל להתרחש. על מנת לספק תגובה מיידית, הפקודה Telinit Q או q יכולה להתעורר כדי לפתוח מחדש את הקובץ / etc / inittab.
אם Init אינו במצב משתמש יחיד ומקבל אות Powerfail (SIGPWR), הוא קורא את הקובץ / etc / powerstatus. לאחר מכן הוא מפעיל פקודה המבוססת על התוכן של קובץ זה:
- F (AIL): כוח נכשל, UPS מספקת את הכוח. הפעל את ערכי Powerwait ו- Powerfail.
- בסדר): הכוח שוחזר, לבצע את ערכי Powerokwait.
- L (OW): הכוח נכשל, ו- UPS יש סוללה חלשה. הפעל את ערכי Powerfailnow.
אם / etc / powerstatus אינו קיים או מכיל שום דבר אחר מלבד האותיות F, O, או L, יונתן מתנהג כאילו הוא קורא את האות F.
השימוש של SIGPWR ו / etc / powerstatus הוא discouraged. כל מי שרוצה לקיים אינטראקציה עם Init צריך להשתמש בערוץ הבקרה / dev / initctl.
כאשר Init מתבקש לשנות את runlevel, הוא שולח את אות אזהרה SIGTERM לכל התהליכים שאינם מוגדרים runlevel חדש. לאחר מכן הוא ממתין חמש שניות לפני סיום בכוח אלה תהליכים באמצעות אות SIGKILL. שים לב כי ייזום מניח שכל התהליכים האלה וצאצאיהם נשארים באותה קבוצת תהליכים שיוצר במקור עבורם. אם תהליך כלשהו משנה את שיוך קבוצת התהליך שלו, הוא אינו מקבל אותות אלה. תהליכים אלה צריכים להיות מופסקת בנפרד.
Telinit
Telinit קשורה ל / sbin / init. זה לוקח ארגומנט אחד תווים אותות הראשונית כדי לבצע את הפעולה המתאימה. הטיעונים הבאים משמשים הנחיות ל Telinit:
- 0, 1, 2, 3, 4, 5 או 6: ספר את 'התחלה' כדי לעבור לרמת ההפעלה שצוינה.
- א ב ג: תגיד תחילה כדי לעבד רק את אלה / etc / inittab ערכי קובץ נתקל runlevel, b, או c.
- Q או q: תגיד ליזום לבחון מחדש את הקובץ / etc / inittab.
- S או s: ספר את 'התחלה' למצב 'משתמש יחיד'.
- U או u: לספר לינץ 'לבצע מחדש את עצמו (שמירה על המדינה). לא בדיקה מחדש של / etc / קובץ inittab קורה. Runlevel צריך להיות S, s, 1, 2, 3, 4 או 5; אחרת, הבקשה מתעלמת בשקט.
Telitit יכול גם לומר הראשונית כמה זמן זה צריך לחכות בין שליחת התהליכים אותות SIGTERM ו SIGKILL. ברירת המחדל היא חמש שניות, אך ניתן לשנות ערך זה באמצעות - שנייה אפשרות.
Telinit יכול להיות מופעל רק על ידי משתמשים עם הרשאות מתאימות.
הבינארי הראשונית בודקת אם הוא Init או Telinit על ידי עיון במזהה התהליך שלה. מזהה התהליך האמיתי של Init הוא תמיד 1. מכאן, שבמקום לקרוא Telinit, אדם יכול להשתמש ב- Init כקיצור.