เหตุใดการออกหนึ่ง lsof จึงเปิดตัวสองกระบวนการ


1

ฉันใช้ OS X 10.7 อยู่ในปัจจุบัน บางครั้งฉันต้องการตรวจสอบว่าแอปพลิเคชันใดล็อคไฟล์บางไฟล์ ฉันทำอย่างนั้นโดย

lsof | grep $FILENAME

lsofผมสังเกตเห็นว่าใช้คำสั่งนี้จะเรียกทั้งสองกรณีของ ทำไมถึงเป็นอย่างนั้น?


1
เคล็ดลับ: lsof $FILENAMEเร็วขึ้น
grawity

ขอบคุณ แต่การใช้ grep ทำให้ฉันสามารถค้นหาไฟล์ที่เปิดอยู่โดยใช้เพียงบางส่วนของชื่อ
Max Ried

คำตอบ:


4

lsofทำสิ่งนี้ภายในเพื่อหลีกเลี่ยงการหยุดชะงัก หากต้องทำการดำเนินการที่อาจหยุดชะงักก็จะดำเนินการในกระบวนการเสริม หากการดำเนินการหยุดชะงักมันสามารถฆ่ากระบวนการเสริม มันถูกบันทึกไว้ในคู่มือ:

Lsof สามารถบล็อกได้โดยฟังก์ชั่นเคอร์เนลที่ใช้ - lstat (2), readlink (2), และ stat (2) ฟังก์ชั่นเหล่านี้จะหยุดทำงานในเคอร์เนลตัวอย่างเช่นเมื่อโฮสต์ที่ระบบไฟล์ NFS ที่เมาท์อยู่นั้นไม่สามารถเข้าถึงได้

Lsof พยายามทำลายบล็อกเหล่านี้ด้วยตัวจับเวลาและกระบวนการลูก ...


ฟังดูเหมือนแฮ็คสกปรก: /
Max Ried

1
อย่างแน่นอน อาจกล่าวได้ว่า NFS จริง
David Schwartz

ว้าวบางครั้งฉันก็สงสัยว่าทำไมเราเลือกที่จะให้ระบบดังกล่าวดำเนินการสังคมของเรา ...
Max Ried

@MaxRied: hard,nointrโหมดของ NFS และระบบไฟล์เครือข่ายอื่น ๆ ถูกเพิ่มเข้ามาโดยเจตนาเนื่องจากมันมีประโยชน์: มันช่วยป้องกันโปรแกรมจากการคิดว่าไฟล์ทั้งหมดหายไปโดยฉับพลันถ้าพูดว่า rootfs /ติดกับ NFS และเซิร์ฟเวอร์หยุดทำงานชั่วขณะ . มีกำลังอย่างไรsoftและintrตัวเลือก mount ซึ่งจะทำให้การร้องขอไปยังหมดเวลาและทำให้พวกเขา Interruptible
grawity

1
@ MaxRied: หากคุณเริ่มถามคำถามเช่น "ใครจะเพิ่มพวกเขา" และ "พวกเขาจะเพิ่มพวกเขาไปยังอะไร?" คุณเริ่มเห็นว่าไม่มีที่ไหนที่จะแก้ไขได้ น่าเสียดายที่การดำเนินการที่ไม่มีการปิดกั้นหรือการดำเนินการที่มีการหมดเวลาไม่เคยเป็นส่วนหนึ่งของ API มาตรฐานดังนั้นพวกเขาจึงหายไปจากห่วงโซ่ทั้งหมดตลอดทางจาก userspace ผ่าน C ไฟล์ API ผ่านเคอร์เนลข้ามโปรโตคอล NFS กลับไปที่ ไฟล์เซิร์ฟเวอร์จากนั้นเคอร์เนลระบบไฟล์ API ของเซิร์ฟเวอร์ที่ใช้รหัสเซิร์ฟเวอร์ NFS
David Schwartz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.