Текущая скорость процессора меньше минимальной?

В конвейере команды выполняются одновременно. В том-то и дело, что вывод одного подается другому в режиме реального времени.

Статус выхода команды известен только тогда, когда она возвращается. Если вы хотите, чтобы awkобработал вывод foo, а также получил доступ к его статусу выхода, вам нужно будет запуститьawkпослеfooпосле сохранения вывода fooгде-то вроде:

foo > file
awk -v "rc=$?" '{print rc, $0}' < file

В качестве альтернативы вы могли бы awkзапускать fooсам по себе (ну, все еще через оболочку для интерпретации командной строки ), читать ее вывод (через канал через его cmd | getlineинтерфейс наpopen())и получить статус выхода с помощью:

awk -v cmd=foo '
  BEGIN {
    while ((cmd | getline) > 0) {
      print
    }
    rc = close(cmd)
    print rc
  }'

Однако обратите внимание, что способ awkкодирования состояния выхода варьируется от одной awkреализации к другой. В одних это статус прямо как возвращенный waitpid()или pclose(), в других это тот, что разделен на 256 (даже когда fooубит сигналом )... хотя вы должны быть в состоянии полагайтесь на rcравным 0 тогда и только тогда, когда команда была успешной.

В случае с gawk, оно недавно изменилось .

Или вы могли бы передать статус выхода в конце через канал:

(foo; echo "$?") | awk '
   {saved = $0}
   NR > 1 {
     # process the previous line
     $0 = prev
     print "output:", $0
   }
   {prev = saved}
   END{rc = prev; print rc}'

(предполагая, что вывод fooзаканчивается символом новой строки, когда он не пустой (является действительным текстом )).

Или подается по отдельной трубе. Например, в Linux и с оболочкой, отличной от ksh93:

{ : extra pipe | { (foo 3<&-; echo "$?" > /dev/fd/3) | awk '
  {print}
  END {getline rc < "/dev/fd/3"; print rc}'
} 3<&0 <&4 4<&-; } 4<&0

3
16.12.2020, 18:04
1 ответ

Если что-то не так, нельзя судить по выводу lscpu. Я никогда не видел, чтобы текущая частота была намного ниже минимальной, но, учитывая сложность процессора, это тоже не удивительно. Регулятор мощности может с помощью состояний ACPI повышать производительность для повышения производительности или уменьшать или регулировать тактовую частоту для снижения энергопотребления и нагрева для каждого ядра ЦП в отдельности. Он также может вставлять STOPCLOCK, где ЦП может пропускать тактовые импульсы. У AMD есть Cool'n'Quiet и PowerNow! которые могут повлиять на напряжение и частоту. Материнская плата имеет влияние и, возможно, даже блок питания. Но особенно обратите внимание на температуру ядер процессора.

Linux предоставляет сведения о частотах через интерфейс /sys. lscpu использует их для обобщения. Но посмотрите на параметры ядра напрямую, если вы подозреваете, что у вас есть проблема, особенно когда система находится под нагрузкой.

find /sys -name freq

Описание ядра по частоте процессора задокументировано здесь. Ядро Linux CPUFREQ

0
18.03.2021, 22:42

Теги

Похожие вопросы