ทำไมการรีสตาร์ทจึงจำเป็นสำหรับการอัพเดตบางตัวเท่านั้น?


18

เหตุใด Ubuntu จึงไม่จำเป็นต้องรีสตาร์ทในการอัปเดตเพิ่มเติม ฉันรู้ว่าสำหรับการปรับปรุงเคอร์เนลและสิ่งต่าง ๆ เช่นโปรแกรมควบคุมวิดีโอมันไม่สามารถโหลดการเปลี่ยนแปลงโดยไม่ต้องรีสตาร์ท แต่ฉันอยากรู้เกี่ยวกับการอัปเดตพื้นฐานของแพ็คเกจพื้นฐานที่ค่อนข้างบ่อยซึ่งไม่ต้องการการรีสตาร์ท สิ่งต่าง ๆ เช่น Telepathy, glibc, gtk เป็นต้นทำไมแพคเกจแบบนี้ถึงไม่ต้องมีการรีสตาร์ทเพื่ออัพเดต? เวอร์ชั่นใหม่ใช้งานได้จริงหรือไม่หลังจากการอัพเดท?

อีกตัวอย่างหนึ่งคือ Gwibber ฉันเพิ่งได้รับและอัปเดตเป็น gwibber ผ่านทาง Update Manager ในขณะที่ gwibber กำลังทำงาน การอัปเดตเสร็จสมบูรณ์ gwibber จะเรียกใช้รุ่นใหม่โดยไม่ต้องรีสตาร์ทด้วยตนเองหรือไม่ และนั่นก็เหมือนกันสำหรับแพ็คเกจอื่น ๆ (ฉันรู้ว่าชอบ mysql และ apache รีสตาร์ทโดยอัตโนมัติในการอัปเดต) สำหรับแพ็คเกจที่ไม่รีสตาร์ทโดยอัตโนมัติไม่สามารถเป็นปัญหาความปลอดภัยสำหรับการแก้ไขปัญหาความปลอดภัยหรือไม่

สิ่งนี้เกิดขึ้นเพราะฉันใช้งาน OS X มาประมาณหนึ่งสัปดาห์และเกือบทุกการอัพเดทต้องเริ่มต้นใหม่แม้ว่ามันจะไม่เกี่ยวข้องกับเคอร์เนล / ไดรเวอร์วิดีโอ (เท่าที่ฉันสามารถบอกได้ - พวกเขาไม่ได้ให้ข้อมูลมากมายกับคุณ ) เพื่อนของฉันคนหนึ่งบอกว่า Apple บังคับให้ทำการรีสตาร์ทบนอัพเดตส่วนใหญ่ "ในกรณี" มันจะแปลกถ้าคุณไม่รีสตาร์ท Windows เป็นสิ่งที่เลวร้ายที่สุดเพราะเกือบทุกการติดตั้ง / ถอนการติดตั้งหรือการปรับปรุงต้องเริ่มต้นใหม่ (มักจะบังคับให้ปิดระบบเพื่อใช้เวลานานมาก ) นี่อาจจะค่อนข้างกว้างสำหรับสถานที่นี้ แต่ทำไมระบบปฏิบัติการที่แตกต่างกันจัดการกับสิ่งนี้แตกต่างกันอย่างไร หรือเฉพาะเจาะจงมากขึ้นกับ Ubuntu: ทำไม Ubuntu จึงไม่ปฏิบัติตามนโยบายการเริ่มระบบใหม่ที่เข้มงวดยิ่งขึ้น

คำตอบ:


23

เมื่อใดก็ตามที่คุณเปิดหรือเรียกใช้ไฟล์ใน Windows Windows จะล็อคไฟล์ดังกล่าว (นี่เป็นการทำให้เข้าใจง่าย แต่โดยทั่วไปจะเป็นจริง) คุณอาจพบข้อผิดพลาดที่น่ารำคาญที่คุณไม่สามารถลบไฟล์ได้เนื่องจากกระบวนการอื่นมีการล็อกแบบเอกสิทธิ์เฉพาะบุคคล มัน. นี่คือเหตุผลที่เมื่อใดก็ตามที่ Windows ต้องอัปเดตตัวเองคุณต้องรีบูตเพื่อให้มีผล Windows จะจัดคิวการแทนที่ไฟล์และกิจกรรมลบเมื่อบู๊ตครั้งถัดไป (เมื่อไม่มีสิ่งใดล็อคไว้)

ในอีกทางหนึ่ง Linux มีกลไกที่ไม่ใช่ไฟล์ที่ถูกล็อค แต่เป็นข้อมูลพื้นฐานในดิสก์นั่นคือ นี่อาจดูเหมือนความแตกต่างเล็กน้อย แต่ก็หมายความว่าบันทึกของไฟล์ในสารบัญของระบบไฟล์สามารถลบได้โดยไม่รบกวนโปรแกรมใด ๆ ที่เปิดไฟล์อยู่แล้ว ดังนั้นคุณสามารถลบไฟล์ในขณะที่มันยังคงดำเนินการหรือใช้งานอยู่และมันจะยังคงอยู่บนดิสก์ตราบใดที่บางกระบวนการมีการจัดการเปิดสำหรับมันแม้ว่ารายการของมันในตารางไฟล์จะหายไป สิ่งนี้ทำให้ Linux สามารถแทนที่โปรแกรมได้อย่างสมบูรณ์ในขณะที่มันยังทำงานอยู่จากนั้นเพียงรีสตาร์ทโปรแกรมหรือเพียงแค่รอให้กระบวนการออกไปเอง เมื่ออินสแตนซ์เก่าถูกฆ่า

ดังนั้นตราบใดที่ไฟล์ใดไฟล์หนึ่งไม่พิเศษในบางวิธี (เช่นไฟล์อิมเมจเคอร์เนลหรือไฟล์ที่เป็นระบบระดับต่ำในทำนองเดียวกัน) ตัวอัปเดตสามารถอัปเดตแบบนี้ได้ตามปกติ ฉันแน่ใจว่ามีกรณีพิเศษและสถานการณ์ที่นี่ไม่ใช่ความคิดที่ดี แต่สำหรับกรณีส่วนใหญ่ก็ใช้ได้

สำหรับเหตุผลที่ OS X ทำเช่นนั้นทฤษฎี "ในกรณี" ฟังดูมีเหตุผล


1
แสดงให้เห็นถึงจุดประหลาดใจของสร้างแฟ้ม test.py: #!/usr/bin/env python print raw_input()Run นี้กับpython test.pyหรือและเมื่อมันจะแจ้งให้คุณสำหรับการป้อนข้อมูลchmod +x test.py && ./test.py rm test.py
raylu

เหตุผลที่โปรแกรมผู้ใช้ส่วนใหญ่ไม่ได้รับการรีสตาร์ทอัตโนมัติคือพวกเขาคิดว่าอายุการใช้งานสั้นมากและแทบจะไม่มีค่าใช้จ่ายในการเปลี่ยนระบบ หากคุณกังวลว่าคุณสามารถออกจากระบบและกลับมาใหม่ได้สิ่งนี้จะปิดโปรแกรมทั้งหมดที่คุณเปิดไว้
LassePoulsen

2
โดยเฉพาะอย่างยิ่ง dpkg ติดตั้งไฟล์โดยเขียนมันเป็น foo.dpkg-new แล้วเปลี่ยนชื่อไฟล์เหล่านั้นที่ด้านบนของไฟล์ก่อนหน้าใด ๆ
โคลินวัตสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.