แต่ละกระบวนการมีคุณสมบัติหลายอย่างที่กระบวนการสามารถตั้งค่าเป็นรายบุคคลและเป็นอิสระจากกระบวนการอื่น ๆ ตัวอย่างคือข้อ จำกัด ทรัพยากร umask ไดเรกทอรีปัจจุบันตัวแปรสภาพแวดล้อมและอื่น ๆ เมื่อสร้างโปรเซส (ผ่านการfork()เรียกของระบบ) เด็กจะรับค่าคุณสมบัติเหล่านี้จากพาเรนต์ หลังจากนี้กระบวนการลูกอาจตั้งค่าคุณลักษณะเหล่านี้โดยพลการ (มีข้อ จำกัด บางประการกระบวนการอาจไม่เพิ่มขีด จำกัด ของทรัพยากรอย่างหนักหรือเปลี่ยนไดเรกทอรีปัจจุบันเป็นไดเรกทอรีที่ไม่มีสิทธิ์ดำเนินการ)
มีเพียงไม่กี่โปรแกรมเท่านั้นที่ปรับเปลี่ยนตัวแปรสภาพแวดล้อมซึ่งส่วนใหญ่ไม่ได้รบกวน สมมติว่ากรณีหลัง ดังนั้นหากกระบวนการลูกสร้างตัวเด็กเพิ่มขึ้นกระบวนการเหล่านี้จะมีตัวแปรสภาพแวดล้อมเช่นเดียวกับปู่ย่าตายาย และอื่น ๆ
ตอนนี้เชลล์มีตัวแปรมากมายที่สามารถดูได้set(ในเชลล์ของ Bourne Shell type, ไม่ทราบเกี่ยวกับ C เชลล์) ตัวแปรเหล่านี้ไม่ใช่ตัวแปรสภาพแวดล้อมยกเว้นว่าเป็นexported envตัวแปรสภาพแวดล้อมที่สามารถดูได้ด้วย หากคุณเรียกใช้โปรแกรมจากบรรทัดคำสั่งเชลล์โปรแกรมจะสืบทอดตัวแปรสภาพแวดล้อมจากเชลล์ เช่นเดียวกันสำหรับโปรแกรมที่เรียกใช้จากเชลล์สคริปต์
ดังนั้นเมื่อเข้าสู่ระบบจะมีเชลล์ที่อ่านข้อมูลโปรไฟล์ (เช่น~/.profile) และสืบทอดให้กับเด็ก ๆ ทุกคนหลานและอื่น ๆ นี่คือวิธีที่การตั้งค่าตัวแปรสภาพแวดล้อมลดลงจากเชลล์ล็อกอินหรือสคริปต์ล็อกอินไปยังโปรแกรมอื่น ๆ ทั้งหมดที่เปิดตัวภายในเซสชันการเข้าสู่ระบบ
ฉันสร้างตัวแปรสภาพแวดล้อมในหน้าต่างเทอร์มินัลหนึ่งและพยายามที่จะสะท้อนในหน้าต่างเทอร์มินัลอื่น ที่แสดงอะไร
จากคำอธิบายข้างต้นนี่คือผลลัพธ์ที่คาดหวัง การเปลี่ยนแปลงสภาพแวดล้อมของกระบวนการส่งผลกระทบต่อลูก ๆ ของกระบวนการนี้ที่สร้างขึ้นนับจากนี้ไปไม่ใช่กระบวนการที่มีอยู่
$TEST=hello
สิ่งนี้ไม่น่าจะทำงานได้เว้นแต่ว่าการขยายตัวของตัวแปรจะถูกปิดใช้งานหรือ$TESTมีค่าที่เหมาะสมอยู่แล้ว หากคุณต้องการกำหนดให้helloกับตัวแปรTESTคุณต้องพูดTEST=hello(หมายเหตุ: ไม่$)
หลังจากนั้นฉันส่งออกและลองอีกครั้งechoในหน้าต่างเทอร์มินัลอื่น ผลลัพธ์เหมือนเดิม
นี่เป็นผลลัพธ์ที่คาดหวังอีกครั้ง
แต่ถ้าฉันรันรหัสเดียวกันที่~/.profileตัวแปรล็อกอิน (ต่อท้ายรหัสไปยังไฟล์) สามารถใช้หน้าต่างเทอร์มินัลใดก็ได้
นี่เป็นเพราะเชลล์ในเทอร์มินัลเป็นผู้สืบทอดของเชลล์ที่อ่านการตั้งค่าสภาพแวดล้อมจาก~/.profileนั้นจึงสืบทอดการตั้งค่าเหล่านี้