ระดับแนวคิด
เมื่อคุณเริ่มต้นกระบวนการจากเชลล์ของคุณไดเร็กทอรีการทำงานปัจจุบันของกระบวนการจะเหมือนกับไดเร็กทอรีการทำงานปัจจุบันของเชลล์ของคุณ ในบริบทของเชลล์ไดเร็กทอรีการทำงานปัจจุบันคือตำแหน่งที่คุณอยู่ "at"
ไดเรกทอรีการทำงานปัจจุบันของกระบวนการใด ๆ ที่ใช้ในการตีความเส้นทางญาติ ตัวอย่างเช่นถ้าไดเรกทอรีการทำงานเปลือกของคุณในปัจจุบันเป็น/home/reneและคุณวิ่งls ..จากเปลือกกระบวนการไดเรกทอรีทำงานปัจจุบัน/home/reneก็จะถูกนำมาใช้เพื่อแก้ปัญหาการ../home
คุณสามารถดูไดเรกทอรีการทำงานปัจจุบันของกระบวนการทั้งหมดที่ทำงานบนระบบของคุณด้วยlsof | grep '\scwd\s'(โปรดทราบว่าคุณอาจต้องรูทเพื่อดูกระบวนการของผู้ใช้คนอื่น ๆ ) สิ่งนี้จะช่วยให้คุณทราบว่าไดเรกทอรีทำงานปัจจุบันเกี่ยวข้องกับ กระบวนการทำงานบนระบบของคุณ
ระดับโปรแกรม
ไดเร็กทอรีการทำงานปัจจุบันของเชลล์คือไดเร็กทอรีที่คุณเห็นและแก้ไขด้วยเชลล์ในตัวpwdและcdตามลำดับ คำสั่งเหล่านี้เรียกการเรียกของระบบเช่นgetcwdและchdirทำงานกับไดเรกทอรีการทำงานปัจจุบันของเชลล์ของคุณ
เมื่อใช้bashเป็นตัวอย่างแล้วcdบิวด์อินจะรันบรรทัดนี้ในที่สุด:
if (chdir (nolinks ? newdir : tdir) == 0)
และpwdในที่สุดก็ทำงานในบรรทัดนี้:
the_current_working_directory = getcwd (0, PATH_MAX);
เชลล์เป็นเพียงตัวอย่างที่สะดวกของการใช้งานไดเร็กตอรี่ปัจจุบัน; การเรียกระบบเดียวกันเหล่านี้ถูกใช้โดยโปรแกรมอื่นเช่นกัน โปรแกรมสามารถเปลี่ยนไดเรกทอรีการทำงานปัจจุบันเป็น/usrและเส้นทางสัมพัทธ์ใด ๆ ที่โปรแกรมใช้จะเริ่มจาก/usrไดเรกทอรี
ระดับเคอร์เนล
ไดเร็กทอรีการทำงานปัจจุบันของกระบวนการถูกเก็บไว้โดยเคอร์เนล ร้านค้าลินุกซ์ในpwdสมาชิกของfs_structชี้ไปตามสมาชิกของfs สมาชิกเป็นstruct ซึ่งชี้ไปข้อมูลเกี่ยวกับการติดตั้ง ( ) และสถานที่ไดเรกทอรีในระบบแฟ้ม ( ) แต่ละกระบวนการมีความเกี่ยวข้องกับมันtask_structpwdpathvfsmountdentrytask_struct
chdirและระบบโทรแก้ไขและเรียกคืนข้อมูลในgetcwdpwd