หากฉันมีคำสั่ง piped เช่น
cat myfile | processor_application
โดยที่ processor_application เป็นสิ่งที่อ่านจาก standard in, ใน chunks, ไปจนถึง process, เป็นไปได้ไหมที่จะเห็นว่า cat file มีมาไกลแค่ไหน?
อาจใช้ lsof หรือไม่
ขอบคุณ!
หากฉันมีคำสั่ง piped เช่น
cat myfile | processor_application
โดยที่ processor_application เป็นสิ่งที่อ่านจาก standard in, ใน chunks, ไปจนถึง process, เป็นไปได้ไหมที่จะเห็นว่า cat file มีมาไกลแค่ไหน?
อาจใช้ lsof หรือไม่
ขอบคุณ!
คำตอบ:
คุณสามารถใช้pvในการทำเช่นนี้
pv file | processor_application
เมื่อ pv ผ่านไปมัน stdin โดยตรงถึง stdout คุณไม่จำเป็นต้องใช้ cat
แก้ไข
ขณะที่โปรแกรมของคุณกำลังทำงานอยู่จากนั้นค้นหา PID ของcat
กระบวนการแล้วดูเนื้อหาของ
/proc/<PID>/io
ซึ่งจะบอกจำนวนไบต์ที่เขียน - wchar
แน่นอน! ไปป์วิวเวอร์ไม่แน่นอนว่า เพียงแค่ใส่ไว้ในขั้นตอนของคุณ:
cat myfile | pv | processor_application
คุณสามารถปรับประสิทธิภาพให้เหมาะสมcat
กับตัวอย่างด้านบน:
pv myfile | processor_application
ซึ่งมีข้อได้เปรียบในการจัดทำตัวบ่งชี้ความคืบหน้าจริงเนื่องจาก pv สามารถกำหนดขนาดของอินพุตได้โดยตรง หากคุณใช้ pv ในช่วงกลางของไพพ์ไลน์คุณต้องระบุขนาดไฟล์ด้วยตนเองเพื่อรับความคืบหน้าอย่างแม่นยำ:
input_process | pv -s 100M -p | processor_application
ตรวจสอบเว็บไซต์สำหรับตัวเลือกเพิ่มเติมเพื่อปรับแต่ง pv
pv
เมื่อมันว่าง :-)
pv
เข้าไปในไปป์ไลน์โดยใช้mkfifo
และgdb
(สี่ syscalls กับ gdb's p
)
หากกระบวนการทำงานอยู่แล้ว lsof มีsize/offset
คอลัมน์ซึ่งอาจจะเป็นประโยชน์กับคุณ - หา PID lsof -o -p [PID]
ของกระบวนการแมวที่คุณต้องการในการตรวจสอบแล้ว
หากกระบวนการยังไม่ทำงานpv
ตามที่คนอื่นแนะนำเป็นตัวเลือกที่ดี (สมมติว่าระบบของคุณมียูทิลิตีนั้น)
-o
ไม่ทำงานในระบบของคุณฉันคิดว่าคุณเมามากเกี่ยวกับการใช้lsof
: - / (ฉันถือว่าคุณใช้ lsof เป็นผู้ใช้ที่เปิดตัวcat
กระบวนการหรือเป็นราก?)