ฉันมีความคิดคร่าวๆเกี่ยวกับวิธีที่ userspace และ init-system (ไม่ว่าจะเป็น sysV / upstart / systemd แบบคลาสสิค) ทำงานเมื่อปิดระบบ (ที่สำคัญคือมีการสืบทอดคำสั่ง "หยุด!", "กรุณาหยุดตอนนี้จริงๆ", "กระบวนการที่ฉันต้องฆ่าคุณเพื่อหยุด" และรอ ... สิ่งที่เกิดขึ้น)
ฉันไม่ทราบว่าการปิดระบบทำงานอย่างไรในเคอร์เนล (ซึ่งแน่นอนว่ายังมีสิ่งที่ต้องทำอีกมากมาย)
ฉันพยายามตรวจสอบเอกสารเกี่ยวกับเคอร์เนลhttps://www.kernel.org/doc/htmldocs/และใช้เครื่องมือค้นหาเพื่อนของ NSAเพื่อให้ฉันได้เริ่มต้นค้นหาวิธีการทำงาน
ฉันค้นหาด้วย SE U + L และไม่พบสิ่งใด (ฉันมองข้ามไปหรือไม่)
อย่างไรก็ตามคำถามอาจมีความท้าทายอยู่บ้าง แต่จะได้รับคำตอบในเครือข่ายคำถาม & คำตอบนี้เนื่องจากฉันคิดว่าผู้คนจำนวนมากสนใจที่จะร่างภาพสิ่งที่เกิดขึ้นในเคอร์เนลลินุกซ์เมื่อปิดเครื่อง
อาจมีการเปลี่ยนแปลงเพื่อเชื่อมโยงไปยังคำอธิบายรายละเอียดเพิ่มเติม
คำตอบอาจรวมถึงการที่ระบบเรียกและสัญญาณ kernal ใดบ้าง?
https://github.com/torvalds/linux/blob/b3a3a9c441e2c8f6b6760de9331023a7906a4ac6/arch/x86/kernel/reboot.c น่าจะเป็นไฟล์ x86 ที่เกี่ยวข้องกับการรีบูต (แล้วปิดการปิดระบบใช่มั้ย)
อาจพบข้อมูลโค้ดได้ที่นี่http://lxr.free-electrons.com/source/kernel/reboot.c#L176 สามารถใช้เพื่ออธิบาย
176 โมฆะ kernel_power_off (เป็นโมฆะ) 177 { 178 kernel_shutdown_prepare (SYSTEM_POWER_OFF); 179 ถ้า (pm_power_off_prepare) 180 pm_power_off_prepare (); 181 migrate_to_reboot_cpu (); 182 syscore_shutdown (); 183 pr_emerg ("ปิดไฟ \ n"); 184 kmsg_dump (KMSG_DUMP_POWEROFF); 185 machine_power_off (); 186} 187 EXPORT_SYMBOL_GPL (kernel_power_off);
shutdown(8)
คือเลิกใช้ -n
อย่างใดอย่างหนึ่งซึ่งผมคิดว่าในเอกสารยูนิกซ์เก่าใช้ในการอ่าน " ปิดระบบตัวเอง - หน่วยหลักคือ On Fire " ได้อย่างมีประสิทธิภาพระบบยุ่งฆ่าสวิทช์ที่ จะ / สามารถปล่อยให้บิตกระจัดกระจายไปทั่วพื้น (หรืออย่างน้อยระบบไฟล์ในสถานะที่เสียหาย) - หนึ่งภาพนี้จะใช้สำหรับระบบประเภทเฟรมหลักที่มีคนจับมือพัดลมระบายความร้อน 🕱