ในนั้น เป็นผู้ปกครองของกระบวนการ Linux ทั้งหมด เป็นขั้นตอนแรกที่เริ่มต้นเมื่อคอมพิวเตอร์บูทขึ้นมาและทำงานจนกว่าระบบจะปิดลง เป็นบรรพบุรุษของกระบวนการอื่น ๆ ทั้งหมด
บทบาทหลักของมันคือการสร้างกระบวนการจากสคริปต์ที่เก็บไว้ในไฟล์ / etc / inittab แฟ้มนี้มักเก็บรายการที่ทำให้ Init เริ่มวางไข่ gettys ในแต่ละบรรทัดที่ผู้ใช้สามารถเข้าสู่ระบบนอกจากนี้ยังควบคุมกระบวนการที่เป็นอิสระตามที่กำหนดโดยระบบใด ๆ
runlevels
ระดับการทำงาน คือการกำหนดค่าซอฟท์แวร์ของระบบที่อนุญาตเฉพาะกลุ่มของกระบวนการที่จะดำเนินการเท่านั้น กระบวนการที่ spawned โดย Init สำหรับแต่ละ runlevel เหล่านี้ถูกกำหนดไว้ในไฟล์ / etc / inittab Init อาจเป็นหนึ่งในแปด 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 จะเหมือนกัน ภายในเป็นชื่อแทนสำหรับระดับการทำงานเดียวกัน
บูต
หลังจาก init ถูกเรียกใช้เป็นขั้นตอนสุดท้ายของลำดับการบูตเคอร์เนลค้นหาไฟล์ / etc / inittab เพื่อดูว่ามีรายการประเภท initdefault . รายการ initdefault กำหนด runlevel เริ่มต้นของระบบ หากไม่มีรายการดังกล่าว (หรือไม่มี / etc / inittab เลย) ต้องใส่ runlevel ที่คอนโซลระบบ
Runlevel S หรือ s ใช้ระบบไปยังโหมดผู้ใช้คนเดียวและไม่ต้องใช้ไฟล์ / etc / inittab ในโหมดผู้ใช้คนเดียว root shell จะเปิดขึ้นใน / dev / console
เมื่อเข้าสู่โหมดผู้ใช้คนเดียว init จะอ่านสถานะ ioctl ของคอนโซลจาก /etc/ioctl.save หากไม่มีไฟล์นี้ init จะเริ่มต้นบรรทัดที่ 9600 baud และมีการตั้งค่า CLOCAL เมื่อ init ออกจากโหมดผู้ใช้คนเดียวระบบจะเก็บการตั้งค่า ioctl ของคอนโซลไว้ในไฟล์นี้เพื่อให้สามารถใช้ซ้ำสำหรับเซสชันผู้ใช้คนถัดไปคนถัดไป
เมื่อเข้าสู่โหมดผู้ใช้หลายคนเป็นครั้งแรก Init จะดำเนินการบูตและบูตรายการเพื่อให้ระบบไฟล์สามารถใช้งานได้ก่อนที่ผู้ใช้สามารถเข้าสู่ระบบจากนั้นรายการทั้งหมดที่ตรงกับระดับการทำงานจะถูกประมวลผล
เมื่อเริ่มกระบวนการใหม่ Init จะตรวจสอบว่ามีไฟล์ / etc / initscript อยู่หรือไม่ ถ้าใช้จะใช้สคริปต์นี้เพื่อเริ่มต้นกระบวนการ
ทุกครั้งที่ทำการลงทะเบียนเด็ก Init จะบันทึกข้อเท็จจริงและเหตุผลที่มันตายใน / var / run / utmp และ / var / log / wtmp ให้ไฟล์เหล่านี้มีอยู่
การเปลี่ยนระดับ Runlevels
หลังจากที่กระบวนการดังกล่าวเกิดกระบวนการทั้งหมดไว้แล้ว Init รอให้กระบวนการลูกหลานคนใดคนหนึ่งตายเป็นสัญญาณ powerfail หรือจนกว่าจะมีการส่งสัญญาณโดย Telinit เพื่อเปลี่ยนระดับการทำงานของระบบ เมื่อเงื่อนไขข้อใดข้อหนึ่งเหล่านี้เกิดขึ้นจะเป็นการตรวจสอบไฟล์ / etc / inittab อีกครั้ง สามารถเพิ่มรายการใหม่ลงในไฟล์นี้ได้ตลอดเวลา อย่างไรก็ตาม init ยังคงรอให้หนึ่งในสามเงื่อนไขข้างต้นเกิดขึ้น เพื่อให้สามารถตอบสนองได้ทันท่วงทีคำสั่ง Telinit Q หรือ q สามารถเรียกใช้งาน Init เพื่อตรวจสอบไฟล์ / etc / inittab อีกครั้ง
ถ้า Init ไม่อยู่ในโหมดผู้ใช้คนเดียวและรับสัญญาณ powerfail (SIGPWR) จะอ่านไฟล์ / etc / powerstatus จากนั้นจะเริ่มต้นคำสั่งตามเนื้อหาของไฟล์นี้:
- ล้มเหลว): กำลังไฟล้มเหลว UPS จะให้กำลังไฟ ดำเนินการ powerwait และรายการ powerfail
- ตกลง): มีการเรียกคืนพลังแล้วให้เรียกใช้รายการ powerokwait
- ต่ำ): ไฟดับและ UPS มีแบตเตอรี่เหลือน้อย ดำเนินการรายการ powerfailnow
ถ้า / etc / powerstatus ไม่มีหรือมีอะไรอื่นนอกจากตัวอักษร F, O หรือ L Init จะทำงานเหมือนกับการอ่านจดหมาย F.
ไม่แนะนำให้ใช้ SIGPWR และ / etc / powerstatus ทุกคนที่ต้องการโต้ตอบกับ Init ควรใช้ช่องควบคุม / dev / initctl
เมื่อ Init ได้รับการร้องขอให้เปลี่ยน runlevel จะส่ง SIGTERM สัญญาณเตือนไปยังกระบวนการทั้งหมดที่ไม่ได้กำหนดไว้ใน runlevel ใหม่ จากนั้นจะรอห้าวินาทีก่อนที่จะถูกยกเลิกโดยใช้สัญญาณ SIGKILL โดยไม่ได้ตั้งใจ โปรดทราบว่า Init สันนิษฐานว่ากระบวนการเหล่านี้ทั้งหมดและลูกหลานของพวกเขายังคงอยู่ในกลุ่มกระบวนการเดียวกันกับที่ Init ได้สร้างไว้สำหรับพวกเขา หากกระบวนการใดเปลี่ยนแปลงความเกี่ยวข้องของกลุ่มกระบวนการจะไม่ได้รับสัญญาณเหล่านี้ กระบวนการดังกล่าวจะต้องถูกแยกออกจากกัน
telinit
Telinit เชื่อมโยงกับ / sbin / init ใช้อาร์กิวเมนต์หนึ่งอักขระและส่งสัญญาณ Init เพื่อดำเนินการที่เหมาะสม อาร์กิวเมนต์ต่อไปนี้เป็นคำสั่งสำหรับ Telinit:
- 0, 1, 2, 3, 4, 5 หรือ 6: บอก Init ให้เปลี่ยนไปใช้ระดับการทำงานที่ระบุ
- a, b, c: บอกให้ Init ประมวลผลเฉพาะรายการไฟล์ / etc / inittab ที่มี runlevel a, b หรือ c
- Q หรือ q: บอก Init เพื่อตรวจสอบไฟล์ / etc / inittab อีกครั้ง
- S หรือ s: บอก Init เพื่อเปลี่ยนไปใช้โหมดผู้ใช้คนเดียว
- U หรือ u: บอกให้ init ดำเนินการตัวเองใหม่ (รักษาสถานะไว้) ไม่มีการตรวจสอบไฟล์ / etc / inittab อีกครั้ง ระดับ Runlevel ควรเป็น S, s, 1, 2, 3, 4 หรือ 5; มิฉะนั้นคำขอจะถูกละเว้นโดยไม่ตั้งใจ
Telinit สามารถบอก Init ได้นานเท่าไรจึงควรรอระหว่างการส่งสัญญาณ SIGTERM และ SIGKILL ค่าเริ่มต้นคือห้าวินาที แต่ค่านี้สามารถเปลี่ยนแปลงได้ด้วยปุ่ม วินาที ตัวเลือก
Telinit สามารถเรียกใช้เฉพาะผู้ใช้ที่มีสิทธิ์ที่เหมาะสมเท่านั้น
ไบนารี Init จะตรวจสอบว่าเป็น Init หรือ Telinit โดยดูที่รหัสกระบวนการของตน รหัสกระบวนการ Init ของจริงคือ 1 เสมอจากนี้แสดงว่าแทนที่จะเรียก Telinit บุคคลสามารถใช้ Init เป็นทางลัดได้




