Init ແມ່ນພໍ່ແມ່ຂອງຂະບວນການທັງຫມົດ. ບົດບາດຕົ້ນຕໍຂອງມັນແມ່ນການສ້າງຂະບວນການຈາກ script ທີ່ເກັບຮັກສາໄວ້ໃນ file / etc / inittab (ເບິ່ງ inittab (5)). ໄຟລ໌ນີ້ມັກຈະມີບັນດາຂໍ້ມູນທີ່ເຮັດໃຫ້ເກີດການ ເລີ່ມຕົ້ນຂອງ getty s ໃນແຕ່ລະເສັ້ນທີ່ຜູ້ໃຊ້ສາມາດເຂົ້າສູ່ລະບົບໄດ້. ມັນຍັງຄວບຄຸມລະບົບຕ່າງໆທີ່ຕ້ອງການໂດຍລະບົບໃດຫນຶ່ງ.
Runlevels
runlevel ແມ່ນການຕັ້ງຄ່າຊອບແວຂອງລະບົບທີ່ອະນຸຍາດໃຫ້ກຸ່ມຂະບວນການທີ່ເລືອກເທົ່ານັ້ນ. ຂະບວນການທີ່ເກີດໂດຍ init ສໍາລັບແຕ່ລະ runlevel ເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ໃນ / etc / inittab file. Init ສາມາດຢູ່ໃນຫນຶ່ງໃນ 8 ລະດັບ runlevels: 0-6 ແລະ S ຫຼື s . ລະດັບ runlevel ແມ່ນມີການປ່ຽນແປງໂດຍມີ telinit runtime user privileged, ເຊິ່ງສົ່ງສັນຍານທີ່ເຫມາະສົມເພື່ອ init , ບອກມັນທີ່ runlevel ຈະປ່ຽນແປງ.
Runlevels 0,1 ແລະ 6 ຖືກຈອງ. Runlevel 0 ແມ່ນໃຊ້ເພື່ອຢຸດລະບົບ, runlevel 6 ໃຊ້ເພື່ອ reboot ລະບົບແລະ runlevel 1 ແມ່ນໃຊ້ເພື່ອໃຫ້ລະບົບລົງໄປໃນໂຫມດຜູ້ໃຊ້ດຽວ. Runlevel S ບໍ່ໄດ້ຫມາຍຄວາມວ່າຈະຖືກນໍາໃຊ້ໂດຍກົງ, ແຕ່ສໍາລັບ scripts ທີ່ຖືກປະຕິບັດໃນເວລາທີ່ເຂົ້າ runlevel 1. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບນີ້, ເບິ່ງຄູ່ມືສໍາລັບ shutdown (8) ແລະ inittab (5).
Runlevels 7-9 ຍັງຖືກຕ້ອງ, ເຖິງແມ່ນວ່າບໍ່ໄດ້ຖືກບັນທຶກໄວ້ແທ້ໆ. ນີ້ແມ່ນຍ້ອນວ່າ "ແບບດັ້ງເດີມ" Unix variants ບໍ່ໃຊ້ພວກມັນ. ໃນກໍລະນີທີ່ທ່ານກໍາລັງ curious, runlevels S ແລະ s ແມ່ນໃນຄວາມເປັນຈິງຄືກັນ. ພາຍໃນພວກເຂົາແມ່ນລະຫັດລັບສໍາລັບການ runlevel ດຽວກັນ.
ການເລີ່ມຕົ້ນ
ຫຼັງຈາກ init ຖືກເອີ້ນວ່າຂັ້ນຕອນສຸດທ້າຍຂອງລໍາດັບ boot ຂອງ kernel, ມັນເບິ່ງໄຟລ໌ / etc / inittab ເພື່ອເບິ່ງວ່າມີປະເພດ initdefault (see inittab (5)). ການເຂົ້າລະຫັດ initdefault ກໍານົດໄລຍະເລີ່ມຕົ້ນຂອງລະບົບ. ຖ້າບໍ່ມີການເຂົ້າ (ຫຼືບໍ່ມີ / etc / inittab ຢູ່), ລະດັບ runlevel ຈະຕ້ອງໄດ້ເຂົ້າຢູ່ໃນ console system.
Runlevel S or s ນໍາລະບົບໃຫ້ກັບໂຫມດຜູ້ໃຊ້ດຽວແລະບໍ່ຕ້ອງການໄຟ / etc / inittab . ໃນໂຫມດຜູ້ໃຊ້ດຽວ, ຮາກຮາກແມ່ນເປີດຢູ່ໃນ / dev / console .
ໃນເວລາທີ່ເຂົ້າມາໂຫມດຜູ້ໃຊ້ດຽວ, init ຈະອ່ານສະແດງ ioctl (2) ຂອງ console ຈາກ /etc/ioctl.save . ຖ້າໄຟລ໌ນີ້ບໍ່ມີ, init ເລີ່ມຕົ້ນເສັ້ນຢູ່ທີ່ 9600 baud ແລະກັບ CLOCAL settings. ໃນເວລາທີ່ທໍາອິດປ່ອຍໃຫ້ໂຫມດຜູ້ໃຊ້ແບບດຽວ, ມັນເກັບຮັກສາການຕັ້ງຄ່າ ioctl ຂອງ console ໃນໄຟລ໌ນີ້ເພື່ອໃຫ້ມັນສາມາດນໍາໃຊ້ພວກມັນຄືນໃຫມ່ໄດ້ສໍາລັບກອງປະຊຸມຜູ້ດຽວ.
ເມື່ອເຂົ້າສູ່ໂຫມດຜູ້ໃຊ້ຫລາຍຄັ້ງ, init ປະຕິບັດການ boot ແລະ bootwait entries ເພື່ອອະນຸຍາດໃຫ້ລະບົບໄຟລ໌ທີ່ຖືກຕິດຕັ້ງກ່ອນທີ່ຜູ້ໃຊ້ສາມາດເຂົ້າສູ່ລະບົບ. ຫຼັງຈາກນັ້ນ, ທັງຫມົດທີ່ກົງກັບ runlevel ຈະຖືກປະຕິບັດ.
ເມື່ອເລີ່ມຕົ້ນຂະບວນການໃຫມ່, init ຈະກວດສອບວ່າແຟ້ມ / etc / initscript ຢູ່. ຖ້າມັນເຮັດ, ມັນໃຊ້ script ນີ້ເພື່ອເລີ່ມຕົ້ນຂະບວນການ.
ແຕ່ລະຄັ້ງທີ່ລູກສິ້ນສຸດ, init ຈະ ບັນທຶກຄວາມຈິງແລະເຫດຜົນທີ່ມັນເສຍຊີວິດໃນ / var / run / utmp ແລະ / var / log / wtmp , ຖ້າວ່າໄຟລ໌ເຫຼົ່ານີ້ຢູ່.
ການປ່ຽນແປງ Runlevels
ຫຼັງຈາກມັນໄດ້ເກີດຂື້ນທັງຫມົດຂອງຂະບວນການທີ່ກໍານົດໄວ້, init ລໍຖ້າສໍາລັບຫນຶ່ງໃນຂະບວນການລູກຫລານຂອງມັນທີ່ຈະເສຍຊີວິດ, ສັນຍານໄຟຟ້າຫຼືຈົນກ່ວາມັນໄດ້ຖືກສົ່ງສັນຍານໂດຍ telinit ເພື່ອປ່ຽນລະດັບ runlevel ຂອງລະບົບ. ເມື່ອຫນຶ່ງໃນເງື່ອນໄຂສາມຂ້າງຂ້າງເທິງເກີດຂື້ນ, ມັນຈະກວດເບິ່ງເອກະສານ / etc / inittab ຄືນ ໃຫມ່. ລາຍການໃຫມ່ສາມາດຖືກເພີ່ມເຂົ້າໃນໄຟລ໌ນີ້ໄດ້ທຸກເວລາ. ຢ່າງໃດກໍ່ຕາມ, ຍັງຍັງລໍຖ້າສໍາລັບຫນຶ່ງໃນສາມເງື່ອນໄຂຂ້າງເທິງທີ່ຈະເກີດຂື້ນ. ເພື່ອໃຫ້ສໍາລັບການຕອບສະຫນອງທັນທີ, ຄໍາສັ່ງ q or q telinit ສາມາດ wake ເຖິງ init ເພື່ອກວດສອບໄຟລ໌ / etc / inittab .
ຖ້າ init ບໍ່ຢູ່ໃນໂຫມດຜູ້ໃຊ້ດຽວແລະໄດ້ຮັບສັນຍານ PowerFail (SIGPWR), ມັນຈະອ່ານໄຟ / etc / powerstatus . ຫຼັງຈາກນັ້ນມັນເລີ່ມຄໍາສັ່ງໂດຍອີງໃສ່ເນື້ອຫາຂອງໄຟລ໌ນີ້:
F (AIL)
ພະລັງງານແມ່ນບໍ່, UPS ກໍາລັງສະຫນອງພະລັງງານ. ປະຕິບັດການ powerwait ແລະ powerfail entries.
ຕົກລົງ)
ພະລັງງານໄດ້ຖືກຟື້ນຟູຄືນໃຫມ່, ປະຕິບັດການໃຊ້ ໄຟຟ້າ .
L (OW)
ພະລັງງານແມ່ນບໍ່ແລະ UPS ມີແບດເຕີລີ່ຕ່ໍາ. ປະຕິບັດການປະມູນ powerfailnow .
ຖ້າ / etc / powerstatus ບໍ່ມີຫຼືມີສິ່ງໃດອີກແລ້ວ, ຕົວອັກສອນ F , O ຫຼື L , init ຈະປະຕິບັດຕົວເຊັ່ນວ່າມັນໄດ້ອ່ານຈົດຫມາຍ F.
ການໃຊ້ SIGPWR ແລະ / etc / powerstatus ບໍ່ໄດ້ຖືກທໍ້ຖອຍ. ຄົນທີ່ຕ້ອງການໂຕ້ຕອບກັບ init ຄວນໃຊ້ຊ່ອງຄວບຄຸມ / dev / initctl - ເບິ່ງລະຫັດແຫຼ່ງຂອງຊຸດ sysvinit ສໍາລັບເອກະສານເພີ່ມເຕີມກ່ຽວກັບການນີ້.
ເມື່ອ init ຖືກຮຽກຮ້ອງໃຫ້ປ່ຽນລະດັບ runlevel, ມັນສົ່ງສັນຍານເຕືອນ SIGTERM ກັບຂະບວນການທັງຫມົດທີ່ບໍ່ຖືກກໍານົດໄວ້ໃນລະດັບ runlevel ໃຫມ່. ຫຼັງຈາກນັ້ນມັນລໍຖ້າ 5 ວິນາທີກ່ອນທີ່ຈະສິ້ນສຸດການປະຕິບັດເຫຼົ່ານີ້ໂດຍຜ່ານສັນຍານ SIGKILL . ໃຫ້ສັງເກດວ່າການ ໂຕນ ຄິດວ່າຂະບວນການເຫຼົ່ານີ້ທັງຫມົດ (ແລະລູກຫລານຂອງພວກເຂົາ) ຍັງຢູ່ໃນກຸ່ມຂະບວນການດຽວກັນເຊິ່ງ init ເລີ່ມ ຕົ້ນສໍາລັບພວກເຂົາ. ຖ້າຂະບວນການໃດກໍ່ມີການປ່ຽນແປງການພົວພັນກຸ່ມຂະບວນການຂອງມັນມັນຈະບໍ່ໄດ້ຮັບສັນຍານເຫຼົ່ານີ້. ຂະບວນການດັ່ງກ່າວຈໍາເປັນຕ້ອງຖືກຍົກເລີກແຍກຕ່າງຫາກ.
Telinit
/ sbin / telinit ແມ່ນເຊື່ອມຕໍ່ກັບ / sbin / init . ມັນຕ້ອງໃຊ້ການໂຕ້ຖຽງຫນຶ່ງຕົວອັກສອນແລະສັນຍານ init ເພື່ອປະຕິບັດການປະຕິບັດທີ່ເຫມາະສົມ. ການໂຕ້ຖຽງຕໍ່ໄປນີ້ເປັນຄໍາແນະນໍາໃຫ້ telinit :
0 , 1 , 2 , 3 , 4 , 5 ຫຼື 6
ບອກ init ໃຫ້ສະຫຼັບກັບລະດັບທີ່ກໍານົດໄວ້.
a , b , c
ບອກ init ເພື່ອປຸງແຕ່ງຂໍ້ມູນໄຟລ໌ / etc / inittab ທີ່ມີ runlevel a , b ຫຼື c .
Q or q
ບອກໃຫ້ ເລີ່ມຕົ້ນ ກວດສອບໄຟລ໌ / etc / inittab ໃຫມ່.
S or s
ບອກ init ໃຫ້ປ່ຽນເປັນໂຫມດຜູ້ໃຊ້ດຽວ.
U or u
ບອກຂັ້ນຕອນທີ່ຈະປະຕິບັດຕົວເອງ (ຮັກສາລັດ). ບໍ່ມີການກວດສອບຄືນໃຫມ່ຂອງໄຟລ໌ / etc / inittab . ລະດັບການດໍາເນີນງານຄວນຈະເປັນຫນຶ່ງໃນ Ss12345 , ຖ້າບໍ່ດັ່ງນັ້ນການຮ້ອງຂໍຈະຖືກປະຕິເສດຢ່າງງຽບໆ.
telinit ຍັງສາມາດບອກຂັ້ນຕອນທີ່ຄວນລໍຖ້າລະຫວ່າງການສົ່ງຂັ້ນຕອນ SIGTERM ແລະ SIGKILL ສັນຍານ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 5 ວິນາທີ, ແຕ່ວ່ານີ້ສາມາດປ່ຽນແປງດ້ວຍຕົວເລືອກ -t sec .
telinit ສາມາດເອີ້ນໄດ້ໂດຍຜູ້ໃຊ້ທີ່ມີສິດທິພິເສດທີ່ເຫມາະສົມເທົ່ານັ້ນ.
ການກວດເບິງ ເລີ່ມຕົ້ນ ຖ້າມັນແມ່ນ init ຫຼື telinit ໂດຍການຊອກຫາ id process ຂອງມັນ; id process id init is always 1 ຈາກນີ້ມັນບອກວ່າແທນທີ່ຈະໂທ telinit ຫນຶ່ງກໍ່ສາມາດໃຊ້ init ແທນທີ່ຈະເປັນ shortcut.