Trên Linux, thông tin có sẵn trong các trường từ 14 đến 17 của /proc/$pid/stat
(xem Proc (5) để biết chi tiết):
Các lĩnh vực là:
- 14: thời gian của người dùng (về số lần bấm đồng hồ)
- 15: thời gian hệ thống
- 16: thời gian chờ đợi của trẻ em
- 17: Thời gian chờ đợi của trẻ em
(tất cả các luồng của một quy trình nhất định có cùng giá trị ở đó)
Họ không được báo cáo trực tiếp bởi ps
.
ps
báo cáo 14 + 15 với ps -o time
và 14 + 15 + 16 + 17
với ps --cumulative -o bsdtime
.
Xin lưu ý rằng trường thứ hai trong /proc/$pid/stat
có thể chứa khoảng trắng hoặc ký tự dòng mới, vì vậy bạn không thể phân tích cú pháp bằng awk $1
, $2
...
Bạn có thể sử dụng perl
như:
$ perl -MPOSIX -l -0777 -ne '@f = /\(.*\)|\S+/gs;
printf "utime: %.2f\nstime: %.2f\ncutime: %.2f\ncstime: %.2f\n",
map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27
Một quá trình có thể lấy lại thời gian của riêng nó với getrusage(RUSAGE_SELF)
và getrusage(RUSAGE_CHILDREN)
.
Ngoài ra còn có một times
cuộc gọi hệ thống lấy thông tin tương tự. Vỏ POSIX có tích hợp times
sẵn cho điều đó. Một số shell cũng cung cấp thông tin đó với time
(không có đối số).
$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s
$ ps -o time -p "$$"
TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
TIME
1:36
times(2)
vàtimes
dựng sẵn vỏ của bạn. Cáctime
từ khóa của một số vỏ khi bởi chính nó cũng hiển thị thời gian.