สมมติว่า/usr/local/bin/ruby
มีการทำงานในพื้นหลังและจากนั้นเราเขียนทับด้วยรุ่นที่แตกต่างกันหรือแม้กระทั่งลบruby
ruby
จะเกิดอะไรขึ้นกับกระบวนการทับทิมเหล่านั้น?
สมมติว่า/usr/local/bin/ruby
มีการทำงานในพื้นหลังและจากนั้นเราเขียนทับด้วยรุ่นที่แตกต่างกันหรือแม้กระทั่งลบruby
ruby
จะเกิดอะไรขึ้นกับกระบวนการทับทิมเหล่านั้น?
คำตอบ:
มันขึ้นอยู่กับวิธีการอัพเดทการปฏิบัติการ หากเปิดไฟล์เดียวกันและมีการเปลี่ยนแปลงบางส่วนสิ่งเลวร้ายจะเกิดขึ้น ถ้ามันถูกลบออกไฟล์จะถูกลบออกจากโครงสร้างไดเรกทอรีของระบบไฟล์ แต่ไม่ได้ยกเลิกการเชื่อมโยง (เช่นลบ) จริง ๆ จนกว่ากระบวนการสุดท้ายที่เปิดมันได้ดำเนินการออกจากมัน ดังนั้นหากไฟล์ที่เรียกทำงานได้ถูกลบทิ้งและไฟล์ใหม่ที่มีชื่อเดียวกันเขียนแทนมันไฟล์เก่าควรจะทำงานต่อได้
พวกเขาจะดำเนินต่อไป อาจผิดพลาดอย่างน่ากลัวหากพวกเขาพยายามเข้าถึงตัวเองและรับบางสิ่งผิดอย่างสิ้นเชิง ฉันจะไม่ทำอย่างนั้นถ้าฉันไม่ต้องทำ :)
จะเกิดอะไรขึ้นกับกระบวนการทับทิมเหล่านั้น?
ฉันเข้าใจว่าเคอร์เนล Linux มีส่วนประกอบที่เรียกว่าโหลดเดอร์ที่เปิดไฟล์ปฏิบัติการเองซึ่งมีรูปภาพในระหว่างกระบวนการโหลด / เชื่อมโยงและเมื่อเสร็จสิ้นการเชื่อมโยงไปยังไลบรารี ฯลฯ ตัวโหลดปิดไฟล์ ดังนั้นกระบวนการนี้จะเกิดขึ้นและเสร็จสมบูรณ์ตามเวลาที่เคอร์เนลเปิดตัวกระบวนการจริง
ฉันไม่แน่ใจว่าจำเป็นต้องเรียกใช้ไฟล์ปฏิบัติการดั้งเดิมบนดิสก์หรือไม่หากไฟล์ปฏิบัติการในภายหลังพยายามนำเข้าไลบรารีภายนอก
ฉันจะบอกว่าและมันก็เป็นประสบการณ์ของฉันที่ถ้าคุณลบไฟล์ปฏิบัติการบนดิสก์ไฟล์ปฏิบัติการที่โหลดในหน่วยความจำจะไม่ได้รับผลกระทบ ในทำนองเดียวกันหากไฟล์ที่ปฏิบัติการได้ถูกแทนที่ด้วยเวอร์ชันที่ใหม่กว่าขณะนี้ไฟล์ที่เรียกใช้งานจะไม่ถูกอัปเดตเป็น "อัตโนมัติ" เว้นแต่ว่าจะหยุดและเปิดใหม่
ฉันมีปัญหากับตัวควบคุม RAID ที่ทำให้ดิสก์ทั้งหมดที่ไดเรกทอรีรากและพาร์ติชันอื่น ๆ ถูกเมาท์เพื่อทำหน้าที่ในทันทีราวกับว่ามันถูกตัดการเชื่อมต่อ ไม่สามารถโหลดโปรแกรมใหม่ได้ แต่โปรแกรมในหน่วยความจำทำงานได้ดีจนกว่าจะต้องการไฟล์จากดิสก์