утилита ps в linux (procps), как проверить какой процессор используется

Речь идет о пакете procps, утилите ps для Linux.

Может ли он напечатать номер последнего использованного процессора для каждого процесса (потока)?

Обновление: не время ЦП (10 секунд), а НОМЕР ЦП (ЦП0, ЦП5, ЦП123)


person osgx    schedule 20.04.2011    source источник


Ответы (4)


какой из нескольких процессоров? согласно справочной странице, он не предлагает для этого такой возможности. но в моей стабильной системе Debian он принимает недокументированные -o cpu


после просмотра исходного кода и вывода ps L, я полагаю, что ваш ответ - это параметры вывода cpuid или sgi_p, идентификаторы столбцов 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? */

person jcomeau_ictx    schedule 20.04.2011
comment
нет, это не так. Не процессорное время, а Number of last used CPU (CPU0,CPU1,CPU2) как в top f j J: P = Last used cpu (SMP) - person osgx; 20.04.2011
comment
Но top из того же procps может. - person osgx; 20.04.2011
comment
Я это вижу и согласен. Но в ps такой опции нет, как описано на странице руководства. - person jcomeau_ictx; 20.04.2011
comment
Ага! попробовать -о процессор; он его принимает, но на моей однопроцессорной системе показывает только - - person jcomeau_ictx; 20.04.2011
comment
в моей системе с 4 процессорами это также - для всех процессов ( - person osgx; 20.04.2011
comment
пожалуйста, посмотрите мое последнее редактирование, надеюсь, один из этих вариантов удовлетворит ваши потребности. - person jcomeau_ictx; 21.04.2011

На справочной странице ps(1) сказано, что вы можете использовать поле psr:

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

Или вы можете использовать поле cpuid, которое делает то же самое.

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

Два имени используются для совместимости с Solaris (psr) и NetBSD/OpenBSD ( cpuid).

Чтобы также получить потоки, добавьте параметр -L (и поле lwp, если вы используете -o).

Без потоков:

$ 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

С нитями:

$ 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 к обычным полям:

$ 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
person Mikel    schedule 20.04.2011
comment
Также есть опция -P, которая не задокументирована, но избавляет от необходимости печатать. - person Mikel; 21.04.2011

Также сильно недооценены:

mpstat -I ALL 1 | less -SR
person sehe    schedule 20.04.2011
comment
Это доступно в старой ubuntu? - person osgx; 21.04.2011
comment
Он уже был доступен в Dapper (2006) и находится в пакете sysstat. Хотя не оглядывался назад - person sehe; 21.04.2011
comment
Если на то пошло, вы можете запустить top и нажать 1 (цифра 1), чтобы увидеть нагрузку на ЦП. - person Mikel; 21.04.2011

Я сделал это на Arch, это может помочь кому-то там:

ps -C "process" -L -o pid,lwp,pcpu,cpuid,time
  • -C: выберите процесс с именем «процесс»
  • -L: перечислить потоки процесса
  • -o: specify output info
    • pid: process id
    • lwp: упрощенный процесс (поток)
    • pcpu: загрузка ЦП (в процентах)
    • cpuid: идентификатор процессора.
    • время: время потока (от начала)
person Aboud    schedule 05.09.2018