มีวิธีที่จะทำให้“ ท็อป” ทำงานอย่างแน่นอนเพียงครั้งเดียวและออกไปได้หรือไม่?


13

ฉันพบว่าเอาต์พุตของคำสั่งเชลล์topเป็นวิธีที่ง่ายและคุ้นเคยเพื่อให้ได้แนวคิดคร่าวๆเกี่ยวกับสุขภาพของเครื่องจักร ฉันต้องการให้บริการtopเอาต์พุต (หรือสิ่งที่คล้ายกับมัน) จากเว็บเซิร์ฟเวอร์เล็ก ๆ บนเครื่องเพื่อการตรวจสอบอย่างหยาบ

มีวิธีที่จะได้รับสูงสุดในการเขียนผลลัพธ์ต้นฉบับเดิมครั้งเดียวโดยไม่ต้องจัดรูปแบบอักขระ? ฉันเคยลองแล้ว:

(sleep 1; echo 'q') | top > output.txt

สิ่งนี้ดูเหมือนจะใกล้เคียงกับสิ่งที่ฉันต้องการยกเว้นว่า (1) ไม่มีการรับประกันว่าฉันจะไม่ได้รับข้อมูลหน้าจอมากกว่าหนึ่งหรือน้อยกว่าและ (2) ฉันต้องตัดอักขระการจัดรูปแบบเทอร์มินัลออกทั้งหมด

หรือมีtopคำสั่งเหมือนอื่น ๆที่แสดงทั้งหน่วยความจำระดับเครื่องและระดับกระบวนการ / การใช้ CPU / ข้อมูล uptime หรือไม่?

(โดยหลักแล้วฉันชอบกลยุทธ์ที่พกพาได้ทั้ง Linux และ Mac OS X เนื่องจาก devs ของเราใช้ Mac และสภาพแวดล้อมที่มีประสิทธิภาพของเราคือ Linux)

คำตอบ:


23

ใน Linux คุณสามารถลองสิ่งนี้:

top -bn1 > output.txt

จากman top:

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

ด้วย OS X ลอง:

top -l 1

จากOSX manpage ด้านบน :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.

ดูเหมือนว่าคำตอบทั้งหมดที่ฉันต้องการหากใช้topบน OS X รองรับแฟล็ก -b :-( น่าเสียดายที่มันไม่ได้และฉันไม่เห็นรุ่นของtophomebrew ที่มีให้ดูเหมือนว่าคำตอบที่ถูกต้องสำหรับ Linux, tho
Mickalot

@Mickalot: ดูการปรับปรุงของฉัน คุณสามารถติดตั้ง GNU อันดับต้น ๆ ใน Mac OSX ได้หรือไม่?
cuonglm

@Gnuoc: /usr/bin/top -l 1บน OSX 10.9.4 สมบูรณ์แบบ ... ขอบคุณ! สำหรับการติดตั้งบน GNU ฉันสามารถติดตั้งลงบนเครื่องของฉันได้แต่ฉันต้องโน้มน้าวให้ผู้พัฒนารายอื่นติดตั้งลงในเครื่องของพวกเขาเพื่อให้รหัสของฉันทำงานให้พวกเขาดังนั้นฉันจึงควรหลีกเลี่ยง (ถ้าไม่สามารถใช้งานผ่าน homebrew จะมีการต่อต้าน) ตอนนี้ฉันจะเปลี่ยนจากแพลตฟอร์มฉันจะโลภ ... คุณรู้หรือไม่ว่า Windows แบบกึ่งเทียบเท่าดังนั้น devs เหล่านั้น (เรามี ไม่กี่) สามารถมีหน้าสถานะหยาบ? (ถ้าไม่เป็นอย่างนั้นคำตอบของคุณก็มีประโยชน์มากแล้ว!)
มิ

@Mickalot: จดจำบันทึกย่อจาก manpage ด้านบนของ OSX โปรดทราบว่าตัวอย่างแรกที่แสดงจะมี% CPU ที่ไม่ถูกต้องปรากฏขึ้นสำหรับแต่ละกระบวนการตามที่คำนวณโดยใช้เดลต้าระหว่างตัวอย่าง . สำหรับผู้ใช้ Windows บางทีคุณสามารถใช้ `` cygwin`
cuonglm

@Gnuoc ขอบคุณสำหรับจุดพิเศษ ฉันคิดว่าฉันสามารถทำได้top -l 2และทิ้งตัวอย่างหน้าแรกไปได้หรือไม่
Mickalot

1

เพื่อรับหมายเลขประเภทที่คล้ายกันจากระบบ Windows คุณจะต้องดู PowerShell

get-processเพียงเพื่อให้ได้รายชื่อของกระบวนการที่คุณและมองไปที่ ลองดูที่การอ้างอิงนี้

ในการทำค้นหาเพิ่มเติมบางส่วนพบว่ามีคำสั่งเล็ก ๆ น้อย ๆ มีความสุขที่นี่

ซึ่งถ้าคุณนำออกจากวงขณะที่นำเสนอสำหรับความต้องการของคุณจะเป็น:

ps | sort -desc cpu | select -first 30

psใน PowerShell get-processเป็นนามแฝงสำหรับ


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