在文件 /proc/[PID]/stat
中,值 cutime
和 cstime
(该文件的 14 和 15 个元素) jiffies 带有子进程,这是否意味着进程的子进程?
int cutime; /** user mode jiffies with childs **/
int cstime; /** kernel mode jiffies with childs **/
这是否意味着 jiffies 也包括该进程的子进程?
最佳答案
cuttime 和 cstime 的含义记录在 man 5 proc
cutime
Amount of time that this process’s waited-for children have been scheduled in user mode, measured in clock ticks...
cstime
Amount of time that this process’s waited-for children have been scheduled in kernel mode, measured in clock ticks...
utime
和 stime
测量没有子进程创建的进程的 CPU 时间。
cutime
和 cstime
是该进程创建的所有子进程(及其子进程...)的 CPU 时间总和。它不包括此进程的 utime
和 stime
,仅包括子进程的时间。
请注意,当进程使用 CPU 时,utime
和 ctime
会在线更新,但 cutime
和 cstime
会更新当子进程退出并且进程为该子进程调用 wait
时。
编辑 - @txs 的实验,因为 @txs 不相信:
用于显示进程统计信息的简单脚本:
$ cat ./procstat.sh 6668
while sleep 1
do
cat /proc/$1/stat | awk '{ print "utime:", $14, "stime:", $15, "cutime:" $16, "cstime:", $17 }'
done
两个终端,一个正在运行脚本,另一个执行耗时的处理。我测量了 bash 进程。我在测量的 bash 中开始了无限循环。 utime不断增加。然后我中断循环并启动子 bash 进程并在子进程中运行无限循环。什么都没有改变,但是当我中断进程并退出子bash时,可爱的时间立即改变了。
$ ps +
PID TTY TIME CMD |
10178 pts/2 00:00:00 bash |
10197 pts/2 00:00:00 ps |
| $ ./procstat.sh 10178
| utime: 2 stime: 1 cutime:1 cstime: 3
| utime: 2 stime: 1 cutime:1 cstime: 3
| utime: 2 stime: 1 cutime:1 cstime: 3
| utime: 3 stime: 1 cutime:1 cstime: 3
| utime: 3 stime: 1 cutime:1 cstime: 3
| utime: 3 stime: 1 cutime:1 cstime: 3
$ while true; do true; done | utime: 49 stime: 1 cutime:1 cstime: 3
| utime: 137 stime: 1 cutime:1 cstime: 3
| utime: 209 stime: 1 cutime:1 cstime: 3
| utime: 296 stime: 1 cutime:1 cstime: 3
| utime: 391 stime: 1 cutime:1 cstime: 3
^C | utime: 477 stime: 1 cutime:1 cstime: 3
| utime: 521 stime: 1 cutime:1 cstime: 3
| utime: 521 stime: 1 cutime:1 cstime: 3
| utime: 521 stime: 1 cutime:1 cstime: 3
$ bash | utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
$ while true; do true; done | utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
^C | utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
| utime: 522 stime: 1 cutime:1 cstime: 3
$ exit | utime: 522 stime: 1 cutime:623 cstime: 6
| utime: 522 stime: 1 cutime:623 cstime: 6
| utime: 522 stime: 1 cutime:623 cstime: 6
| utime: 522 stime: 1 cutime:623 cstime: 6
+ utime: 522 stime: 1 cutime:623 cstime: 6
关于linux - cutime 和 cstime jiffies 是否也包括子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46317296/