ใน linux จะเกิดอะไรขึ้นกับโปรแกรมที่กำลังทำงานอยู่เมื่อไฟล์ที่ปฏิบัติการได้ถูกแก้ไขหรือลบ?


12

สมมติว่า/usr/local/bin/rubyมีการทำงานในพื้นหลังและจากนั้นเราเขียนทับด้วยรุ่นที่แตกต่างกันหรือแม้กระทั่งลบrubyruby

จะเกิดอะไรขึ้นกับกระบวนการทับทิมเหล่านั้น?

คำตอบ:


10

มันขึ้นอยู่กับวิธีการอัพเดทการปฏิบัติการ หากเปิดไฟล์เดียวกันและมีการเปลี่ยนแปลงบางส่วนสิ่งเลวร้ายจะเกิดขึ้น ถ้ามันถูกลบออกไฟล์จะถูกลบออกจากโครงสร้างไดเรกทอรีของระบบไฟล์ แต่ไม่ได้ยกเลิกการเชื่อมโยง (เช่นลบ) จริง ๆ จนกว่ากระบวนการสุดท้ายที่เปิดมันได้ดำเนินการออกจากมัน ดังนั้นหากไฟล์ที่เรียกทำงานได้ถูกลบทิ้งและไฟล์ใหม่ที่มีชื่อเดียวกันเขียนแทนมันไฟล์เก่าควรจะทำงานต่อได้


"ถ้าไฟล์เดียวกันนั้นเปิดอยู่และบางส่วนของไฟล์นั้นเปลี่ยนไป" ไม่เท่ากับ "ถ้าไฟล์ถูกลบทิ้งและไฟล์ใหม่ที่มีชื่อเดียวกันเขียนแทน" ?? คุณหมายถึง mv ไฟล์ใหม่ไปยังไฟล์เก่าไม่ดี แต่ไฟล์ rm เก่าแล้ว cp ไฟล์ใหม่ไปยังตำแหน่งไฟล์เก่าก็โอเค?
jean

4

พวกเขาจะดำเนินต่อไป อาจผิดพลาดอย่างน่ากลัวหากพวกเขาพยายามเข้าถึงตัวเองและรับบางสิ่งผิดอย่างสิ้นเชิง ฉันจะไม่ทำอย่างนั้นถ้าฉันไม่ต้องทำ :)


อ๋อ ฉันอัปเดตซอฟต์แวร์ด้วยตนเองตลอดเวลาขณะที่สคริปต์กำลังทำงาน
John T

1
สำหรับสคริปต์เป็นสิ่งสำคัญที่จะต้องมีตัวแปลล่าสุดจริงซึ่งทำงานกับ file descriptor ที่เปิดในตอนแรก ในกรณีนี้มันใช้ได้ตราบใดที่คุณแทนที่ไฟล์และไม่แก้ไข สำหรับไบนารีโดยทั่วไปแล้วพวกเขาจะทำงานกับ FD ที่ถูกแมปอย่างตั้งใจดังนั้นจึงไม่มีปัญหา (เว้นแต่คุณจะแก้ไขไฟล์) แต่อาจมีแอปพลิเคชันที่เปิดชื่อไฟล์สำหรับการตรวจสอบและอาจมีความเสี่ยง (ฉันไม่สามารถให้ตัวอย่างเชิงลบได้) การแจกแจงลินุกซ์ / ผู้จัดการแพ็คเกจส่วนใหญ่ทำงานภายใต้ asumption ที่แทนที่ไบนารีและไลบรารี่ (สำหรับระยะเวลาที่ จำกัด ) นั้นใช้ได้
eckes

1

จะเกิดอะไรขึ้นกับกระบวนการทับทิมเหล่านั้น?

  1. ทำสำเนาของ / usr / local / bin / ruby
  2. [ถ้ามันไม่ทำงานให้รัน / usr / local / bin / ruby]
  3. ลอง: rm / usr / local / bin / ruby
  4. และดูด้วยตัวคุณเอง :)

1

ฉันเข้าใจว่าเคอร์เนล Linux มีส่วนประกอบที่เรียกว่าโหลดเดอร์ที่เปิดไฟล์ปฏิบัติการเองซึ่งมีรูปภาพในระหว่างกระบวนการโหลด / เชื่อมโยงและเมื่อเสร็จสิ้นการเชื่อมโยงไปยังไลบรารี ฯลฯ ตัวโหลดปิดไฟล์ ดังนั้นกระบวนการนี้จะเกิดขึ้นและเสร็จสมบูรณ์ตามเวลาที่เคอร์เนลเปิดตัวกระบวนการจริง

ฉันไม่แน่ใจว่าจำเป็นต้องเรียกใช้ไฟล์ปฏิบัติการดั้งเดิมบนดิสก์หรือไม่หากไฟล์ปฏิบัติการในภายหลังพยายามนำเข้าไลบรารีภายนอก

ฉันจะบอกว่าและมันก็เป็นประสบการณ์ของฉันที่ถ้าคุณลบไฟล์ปฏิบัติการบนดิสก์ไฟล์ปฏิบัติการที่โหลดในหน่วยความจำจะไม่ได้รับผลกระทบ ในทำนองเดียวกันหากไฟล์ที่ปฏิบัติการได้ถูกแทนที่ด้วยเวอร์ชันที่ใหม่กว่าขณะนี้ไฟล์ที่เรียกใช้งานจะไม่ถูกอัปเดตเป็น "อัตโนมัติ" เว้นแต่ว่าจะหยุดและเปิดใหม่

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


ไม่ได้มีประสิทธิภาพมากนัก ฉันคิดว่า Windows จะใช้แผนที่หน่วยความจำแทนดังนั้นหน้าจึงโหลดตามต้องการ
sashoalm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.