linux中的ps实用程序(procps),如何检查使用的是哪个CPU

ps utility in linux (procps), how to check which CPU is used

它是关于procps包,实用程序ps for linux。

它可以打印每个进程(线程)的最后使用的CPU数量吗?

更新:不是CPU时间(10秒),而是CPU NUMBER(CPU0,CPU5,CPU123)


ps(1)手册页说你可以使用psr字段:

1
   psr        PSR     processor that process is currently assigned to.
1
2
3
4
$ ps -o pid,psr,comm
  PID PSR COMMAND
 7871   1 bash
 9953   3 ps

或者您可以使用cpuid字段,它执行相同的操作。

1
2
3
4
$ ps -o pid,cpuid,comm
  PID CPUID COMMAND
 7871     1 bash
10746     3 ps

两个名称的原因是为了与Solaris(psr)和NetBSD / OpenBSD(cpuid)兼容。

要获取线程,请添加-L选项(如果使用-o,则添加lwp字段)。

没有线程:

1
2
3
4
5
$ ps -U $USER -o pid,psr,comm | egrep 'chromi|PID' | head -4
  PID PSR COMMAND
 6457   3 chromium-browse
 6459   0 chromium-browse
 6461   2 chromium-browse

有线程:

1
2
3
4
5
$ ps -U $USER -L -o pid,lwp,psr,comm | egrep 'chromi|PID' | head -4
  PID   LWP PSR COMMAND
 6457  6457   3 chromium-browse
 6457  6464   1 chromium-browse
 6457  6465   2 chromium-browse

还有一个未记录的-P选项,它将psr添加到普通字段:

1
2
3
4
5
$ ps -U $USER -LP | egrep 'chromi|PID' | head -4
  PID   LWP PSR TTY          TIME CMD
 6457  6457   3 ?        00:01:19 chromium-browse
 6457  6464   1 ?        00:00:00 chromium-browse
 6457  6465   2 ?        00:00:00 chromium-browse


也被低估了:

1
mpstat -I ALL 1 | less -SR


哪个多处理器?根据联机帮助页,它没有为此提供选项。但是在我的Debian稳定系统上,它接受了未记录的-o cpu


在查看源和ps L的输出之后,我相信您的答案分别是cpuidsgi_p输出选项,列ID CPUID和P.


'cpu'应该按照output.c中的这个注释工作,但是它当前与'nop'输出pr_nop()相关联:

{"cpu", "CPU", pr_nop, sr_nop, 3, 0, BSD, AN|RIGHT}, /* FIXME ... HP-UX wants this as the CPU number for SMP? */


我在Arch上这样做了,它可以帮助那里的人:

1
ps -C"process" -L -o pid,lwp,pcpu,cpuid,time
  • -C:选择名为"process"的进程
  • -L:列出进程线程
  • -o:指定输出信息

    • pid:进程ID
    • lwp:轻量级进程(线程)
    • pcpu:CPU使用率(百分比)
    • cpuid:CPU ID
    • 时间:线程时间(从开始)