บน Linux ฉันจะดูได้อย่างไรว่าไฟล์มีกระบวนการมากแค่ไหน?


13

หากฉันมีคำสั่ง piped เช่น

   cat myfile | processor_application

โดยที่ processor_application เป็นสิ่งที่อ่านจาก standard in, ใน chunks, ไปจนถึง process, เป็นไปได้ไหมที่จะเห็นว่า cat file มีมาไกลแค่ไหน?

อาจใช้ lsof หรือไม่

ขอบคุณ!


ขอบคุณสำหรับคำตอบ! อย่างไรก็ตามฉันควรจะชัดเจนกว่า: คำสั่งทำงานอยู่แล้ว
wodow

อ่าใช่แล้ว pv ไม่ค่อยมีประโยชน์เท่าไหร่ คุณอาจต้องการแก้ไขคำถามเดิมของคุณเพื่อให้ชัดเจนยิ่งขึ้น
Phil Hollenback

จริงๆแล้วตอนนี้มีคำตอบที่ดีมากสามข้อในคำถามนี้ดังนั้นฉันจะทิ้งมันไว้อย่างที่เป็น
wodow

1
โดยสรุปคือ: ใช้ pv (ก่อนที่คุณจะเริ่มต้น) 2. ใช้ lsof -o (หากสนับสนุน offsets) 3. ดูค่าของ wchar บน / proc / <PID> / io สำหรับ PID ที่รู้จักของ cat กระบวนการ
wodow

คำตอบ:


13

คุณสามารถใช้pvในการทำเช่นนี้

pv file | processor_application

เมื่อ pv ผ่านไปมัน stdin โดยตรงถึง stdout คุณไม่จำเป็นต้องใช้ cat

แก้ไข ขณะที่โปรแกรมของคุณกำลังทำงานอยู่จากนั้นค้นหา PID ของcatกระบวนการแล้วดูเนื้อหาของ

/proc/<PID>/io

ซึ่งจะบอกจำนวนไบต์ที่เขียน - wchar


ฉันเพิ่งเห็นการแก้ไขของคุณ! วิธีนี้ทำงานได้อย่างสมบูรณ์เนื่องจากไม่มี (i) pv ในห่วงโซ่ (ii) lsof -o ทำงาน ขอบคุณ!
wodow

9

แน่นอน! ไปป์วิวเวอร์ไม่แน่นอนว่า เพียงแค่ใส่ไว้ในขั้นตอนของคุณ:

cat myfile | pv | processor_application

คุณสามารถปรับประสิทธิภาพให้เหมาะสมcatกับตัวอย่างด้านบน:

pv myfile | processor_application

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

input_process | pv -s 100M -p | processor_application

ตรวจสอบเว็บไซต์สำหรับตัวเลือกเพิ่มเติมเพื่อปรับแต่ง pv


ฉันชอบpvเมื่อมันว่าง :-)
voretaq7

มันค่อนข้างง่ายที่จะแทรกpvเข้าไปในไปป์ไลน์โดยใช้mkfifoและgdb(สี่ syscalls กับ gdb's p)
user1686

@grawity คุณไม่สามารถแซวแบบนั้นได้ เขียนคำตอบและสาธิตจริง ๆ ตอนนี้ฉันอยากรู้อยากเห็นมาก
Phil Hollenback

2
แฮ็คมากเกินไปที่จะเป็นคำตอบแต่ที่นี่
user1686

6

หากกระบวนการทำงานอยู่แล้ว lsof มีsize/offsetคอลัมน์ซึ่งอาจจะเป็นประโยชน์กับคุณ - หา PID lsof -o -p [PID]ของกระบวนการแมวที่คุณต้องการในการตรวจสอบแล้ว

หากกระบวนการยังไม่ทำงานpvตามที่คนอื่นแนะนำเป็นตัวเลือกที่ดี (สมมติว่าระบบของคุณมียูทิลิตีนั้น)


นี่คือตัวเลือก lsof ที่ฉันได้ดู แต่จะเกิดอะไรขึ้นถ้า lsof -o ไม่ได้รับอนุญาตหรือไม่พร้อมใช้งานบนระบบ?
wodow

หาก-oไม่ทำงานในระบบของคุณฉันคิดว่าคุณเมามากเกี่ยวกับการใช้lsof: - / (ฉันถือว่าคุณใช้ lsof เป็นผู้ใช้ที่เปิดตัวcatกระบวนการหรือเป็นราก?)
voretaq7

ใช่ลองทั้งคู่ ฉันกำลังมองหาเหตุผล lsof เตือน -o เป็นไม่สามารถใช้ได้ในขณะนี้ ...
wodow

คำถามที่พบบ่อย lsof, ทำมิรเรอร์ที่gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ , แสดงถึงประเด็น / คำถาม 3.43.2.3 ที่ lsof -o เป็นไปไม่ได้บน Linux! ฉันคิดว่านี่กว้างเกินไปเนื่องจากผู้ใช้รายอื่นดูเหมือนจะใช้ lsof -o
wodow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.