Như những người khác đã nói, cách tốt nhất có lẽ là top. Nó cần một chút tinh chỉnh và một chút phân tích cú pháp nhưng bạn có thể lấy nó để cung cấp cho bạn mức sử dụng CPU hiện tại dưới dạng phần trăm.
topphân chia việc sử dụng CPU giữa người dùng, quy trình hệ thống và nicequy trình, chúng tôi muốn tổng của ba. Vì vậy, chúng ta có thể chạy toptrong bchế độ atch cho phép chúng ta phân tích đầu ra của nó. Tuy nhiên, như đã giải thích ở đây , lần lặp đầu tiên top -btrả về tỷ lệ phần trăm kể từ khi khởi động, do đó chúng ta cần ít nhất hai lần lặp ( -n 2) để có được tỷ lệ phần trăm hiện tại. Để tăng tốc mọi thứ, bạn có thể đặt delay giữa các lần lặp thành 0.01. Cuối cùng, bạn có grepdòng chứa tỷ lệ phần trăm CPU và sau đó sử dụng gawkđể tính tổng các quy trình của người dùng, hệ thống và tốt đẹp:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Tôi nghĩ bạn cũng có thể có được thông tin này thông qua ps -o pcpu axviệc thêm% sử dụng của mỗi quy trình đang chạy. Thật không may, như được giải thích ở đây , ps"trả về phần trăm thời gian chạy trong toàn bộ thời gian của một quá trình" không phải là thứ bạn cần.
BIÊN TẬP
Dựa trên nhận xét của bạn, phiên bản của bạn topkhác với tôi và bạn nên sử dụng phiên bản này thay thế:
top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Và, để tránh các vấn đề với nội địa hóa, hãy đặt ngôn ngữ thành C:
LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'