จะระบุกระบวนการที่ล็อคไฟล์ได้อย่างไร?


35

ฉันต้องการทราบขั้นตอนที่แน่นอนที่ใช้ล็อกไฟล์ ฉันไม่ต้องการแก้ไขแต่เพียงรู้ว่าระบบของฉันทำอะไร ฉันจะหาคำตอบได้อย่างไร

ตัวอย่างเช่นข้อความนี้:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

อีกครั้งฉันต้องการระบุกระบวนการที่ใช้ไม่ใช่วิธีแก้ไข

คำตอบ:


38

มีความอับอายlsofคือ:

sudo lsof /var/lib/dpkg/lock
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aptitude 4974 root    3uW  REG   8,23        0 815673 /var/lib/dpkg/lock

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

ส่วนที่เหลือของปุถุชนมีfuserคำสั่ง นี่เป็นเรื่องแปลกเพราะมันจะส่งคืน PID แทนชื่อของกระบวนการ:

➜  ~  sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock:   4974

นี่มันบอกว่าไฟล์และ PID ซึ่งคือ 4974 ดังนั้นเราต้องตรวจสอบว่าใคร:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude

6
ทำไมlsofเสียชื่อ มีปัญหากับมันบ้างไหม?
Ruslan

3
@Ruslan ใช่มันช่วยให้ผู้ใช้ clueless รู้การใช้งานจริงของระบบทางตรงกันข้ามกับสิ่งที่ sysadmins ต้องการ ...
Braiam

@Braiam ข้อมูลมากเกินไปอาจเป็นสิ่งที่อันตรายในมือข้างขวา? ^ -_- ^
Peter David Carter

ตัวเลือกที่สองในหนึ่งบรรทัด:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea

8

lslocks เป็นวิธีง่ายๆในการทำเช่นนั้น

lslocks |grep /var/lib/dpkg/lock

สำหรับใช้เชลล์เพื่อจัดการ id กระบวนการ:

for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do 
    echo $pid; 
done

ใช่. lslocksเป็นวิธีที่ดีที่สุดที่จะไปเกี่ยวกับมัน การใช้lsofให้ข้อผิดพลาดนี้กับฉัน: "lsof: คำเตือน: ไม่สามารถ stat () ระบบไฟล์ fuse.gvfsd-fuse / run / user / 1000 / gvfs ข้อมูลเอาต์พุตอาจไม่สมบูรณ์"
Nav

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