ไฟล์ pid และ lock มีไว้ทำอะไร?


75

ฉันมักจะเห็นว่าโปรแกรมระบุไฟล์ pid และล็อค และฉันไม่แน่ใจว่าพวกเขาทำอะไร

ตัวอย่างเช่นเมื่อรวบรวม nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

ใครบางคนสามารถส่องแสงบางอย่างในนี้ได้หรือไม่?

คำตอบ:


86

ไฟล์ pid ถูกเขียนโดยบางโปรแกรมเพื่อบันทึก ID กระบวนการขณะที่กำลังเริ่ม สิ่งนี้มีวัตถุประสงค์หลายประการ:

  • มันเป็นสัญญาณของกระบวนการอื่น ๆ และผู้ใช้ระบบที่โปรแกรมเฉพาะกำลังทำงานอยู่หรืออย่างน้อยก็เริ่มต้นได้สำเร็จ
  • ช่วยให้หนึ่งเขียนสคริปต์ง่ายต่อการตรวจสอบว่ามันทำงานและออกkillคำสั่งธรรมดาหากต้องการจบมัน
  • มันเป็นวิธีที่ประหยัดสำหรับโปรแกรมที่จะดูว่าอินสแตนซ์ที่รันก่อนหน้านี้ของมันออกจากโปรแกรมไม่สำเร็จหรือไม่

การมีไฟล์ pid เพียงอย่างเดียวไม่รับประกันว่า id กระบวนการเฉพาะนั้นกำลังทำงานอยู่ดังนั้นวิธีนี้จึงไม่สามารถป้องกันได้ 100% แต่ "ดีพอ" ในหลายกรณี การตรวจสอบว่ามี PID ที่เฉพาะเจาะจงอยู่ในตารางกระบวนการหรือไม่นั้นไม่สามารถพกพาข้ามระบบปฏิบัติการแบบ UNIX ได้อย่างสมบูรณ์เว้นแต่คุณต้องการพึ่งพาpsยูทิลิตี้ซึ่งอาจไม่เหมาะที่จะโทรหาในทุกกรณี (และฉันเชื่อว่าระบบปฏิบัติการ UNIX ดำเนินการpsแตกต่างกันอยู่แล้ว)

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

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


1
สิ่งนี้ถูกต้องเว้นแต่ว่าไฟล์ล็อคนั้นจะถูกลบด้วยตนเอง VMWare Player แสดง behaivor นี้ตัวอย่างเช่นหาก VMWare Player ขัดข้องคุณต้องลบ.lckไฟล์ในไดเรกทอรีของ VM มิฉะนั้นจะแจ้งให้คุณทราบว่ามีการใช้งานอยู่เมื่อคุณพยายามเริ่มต้น
LawrenceC

1
แล้ว Windows ล่ะ มันจัดการกับไฟล์. lock ได้อย่างไร? ท้ายที่สุดมันไม่เหมือนยูนิกซ์
SarahofGaia

2
ฉันไม่คิดว่ามันเป็นเรื่องธรรมดาสำหรับโปรแกรม Windows ที่จะทำงานในลักษณะนี้ โปรแกรมเดียวที่มีพฤติกรรมนี้ที่ฉันเคยเห็นคือพอร์ตจาก Unix / Linux
HaMster

2
LawrenceC, Re " เมื่อไม่มีโปรแกรมที่ต้องการ" รับ "ทรัพยากรจะสร้างไฟล์ "; แต่มีฟังก์ชั่นที่เหมาะสมที่สร้างขึ้นเพื่อทำข้อมูลให้ตรงกันโดยเฉพาะ ทำไมไม่พึ่งพาฟังก์ชั่นเหล่านั้นแทนที่จะใช้ "ไฟล์แฮ็ค"?
Pacerier

1
@Pacerier - ไฟล์ล็อคในลักษณะนี้อาจใช้บ่อยกว่าโดยสิ่งต่าง ๆ เช่นเชลล์สคริปต์หรือโปรแกรมที่อาจโต้ตอบกับเชลล์สคริปต์เนื่องจากเชลล์ Unix / Linux โต้ตอบกับระบบไฟล์ได้ง่ายมากเมื่อเทียบกับการซิงโครไนซ์พื้นฐานอื่น ๆ ไฟล์ยังคงอยู่ในกระบวนการที่แตกต่างกันได้อย่างง่ายดาย โปรแกรมที่มีประสิทธิภาพสูงจะเห็นได้ชัดว่าอาจจะทำให้ระบบปฏิบัติการดั้งเดิมดั้งเดิมเทียบกับไฟล์เพื่อซิงโครไนซ์สิ่งที่อยู่ภายในหรือแม้กระทั่งกับกระบวนการอื่น ๆ ที่ไม่ใช่เชลล์
LawrenceC

14

ไฟล์เหล่านี้มักใช้โดย daemons ที่ควรรันเพียงครั้งเดียวในระบบ ไฟล์ PID มักจะมีหมายเลข ID กระบวนการของโปรแกรมที่เปิดตัวและเรียกใช้แล้วหากมีอยู่ นอกจากนี้เมื่อมันเริ่มขึ้นมันจะสร้างไฟล์ล็อค ตราบใดที่มีไฟล์ล็อคอยู่ไฟล์นั้นจะไม่เริ่มใหม่หากไม่มีการแทรกแซงจากผู้ใช้ หากไฟล์ล็อกมีอยู่และรหัสกระบวนการที่กล่าวถึงในไฟล์ pid ไม่ทำงาน daemon จะถือว่าอยู่ในสถานะ "ตาย" หมายความว่าควรจะทำงาน แต่อาจไม่ได้เกิดจากความผิดพลาดหรือการปิดระบบที่ไม่เหมาะสม . สิ่งนี้อาจเริ่มต้นสถานการณ์การเริ่มต้น / รีสตาร์ทพิเศษสำหรับบางโปรแกรม การปิดอย่างถูกต้องจะเป็นการลบไฟล์ล็อค


+1 อธิบายการใช้ทั้งการล็อกไฟล์และไฟล์ pid
Kyle Krull

@Caleb - โปรดอธิบายว่าทำไมทั้งไฟล์ PID และไฟล์ล็อคจึงถูกนำมาใช้ ดูเหมือนว่าไฟล์ PID จะเพียงพอ หากมีไฟล์ PID อยู่ PID จะถูกตรวจสอบเพื่อดูว่ากระบวนการกำลังทำงานอยู่หรือไม่ใช้ขั้นตอนน้อยกว่าการตรวจสอบล็อกไฟล์ตรวจสอบไฟล์ PID จากนั้นตรวจสอบการมีอยู่ของกระบวนการ
MVaughan

@Maughaughan เพื่อหลีกเลี่ยงสภาพการแข่งขันหากไม่มีอะไรอื่น แอพบางตัวมีการใช้งานหลายครั้งเมื่อยังต้องการ PID แต่สามารถปลดล็อคได้ แต่ในระดับพื้นฐานมากขึ้นถ้าคุณโอเวอร์โหลดไฟล์หนึ่งไฟล์สำหรับการดำเนินการทั้งสองคุณเปิดประตูสู่ความล้มเหลวเช่นความผิดพลาดทำให้เกิดสถานะไม่สอดคล้องกันในระบบ
Caleb

8

ไฟล์ PID จะมี ID กระบวนการของกระบวนการที่กำลังทำงานอยู่ สิ่งนี้มีประโยชน์หลายอย่าง คุณสามารถอ่านและตรวจสอบว่ากระบวนการยังทำงานอยู่และดำเนินการตามความเหมาะสมหรืออ่านและฆ่ากระบวนการ

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

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