Выровнять вывод команды по столбцам

Использование renice в программе Linux не сжигает ваш процессор, но не обязательно будет делать то, что вы хотите.

Приоритеты не имеют ничего общего с тем, насколько быстро ЦП выполняет код. Он одинаково быстро выполняет код из программ с разными уровнями приоритета.Приоритеты меняются - это программа, которую операционная система выбирает для запуска, когда ей предоставляется выбор. ЦП могут одновременно запускать только один «поток» выполнения (технически 1 на ядро ​​для многоядерных ЦП).Если ему нужно сделать больше, он полагается на многозадачность - он переключается между выполнением разных программ, чтобы создать иллюзию выполнения большего количества потоков, чем имеется процессоров. Выбирая, сколько времени уделять каждой из этих задач, он делает это, используя приоритет в качестве подсказки.

То, что «в реальном времени» означает для компьютера, не столько «работать так быстро», сколько «не прерывать этот процесс». Программирование в реальном времени очень важно во многих областях. Например, если я писал программное обеспечение, которое управляет антиблокировочной системой тормозов в автомобиле, я действительно не хочу, чтобы моя задача выполнялась на несколько миллисекунд позже, потому что ОС решила, что необходимо запустить диагностику на дворники. Соответственно, программное обеспечение управления антиблокировочной тормозной системой в автомобилях работает с приоритетом «в реальном времени».

По правде говоря, в Linux уровень приоритета «реального времени» употребляется неправильно. Это связано с тем, как Linux планирует свои процессы. В Windows, если у вас есть процесс, который работает с более высоким приоритетом, процессам, работающим с более низким приоритетом, не дается процессорное время, если задача с более высоким приоритетом чего-то не ожидает - вообще никакого. Только процессы ядра могут выполняться поверх задачи Windows в реальном времени. В Windows имеется тонна вредоносного ПО, постоянно работающего в фоновом режиме, поэтому повышение приоритета до «реального времени» предотвращает запуск всего этого мусора.

Однако с этим есть проблема. Иногда ваша задача с более высоким приоритетом зависит от одной из задач с более низким приоритетом. Это называется «инверсией приоритета» и является большой темой в мире многопоточного программирования.Когда это происходит, задача с более высоким приоритетом может заморозить задачу с более низким приоритетом, не осознавая, что она останавливается сама! В Linux этого не происходит, потому что в Linux приоритеты рассматриваются как способ определения того, какая часть ЦП отдана каждой программе, а не как принцип «все или ничего». Процесс, работающий с -20, получает существенно процессорного времени, чем процесс, работающий с 0, но даже при наличии программы -20 программа 0 получает некоторое процессорного времени. Если память обслуживает, текущий планировщик Linux дает программе со значением -1 вдвое больше мощности процессора, чем 0, а программе со значением -2 вдвое больше, чем -1, и так далее. Это означает, что 0,9999046% вашего процессорного времени уйдет на программу с -20, но небольшая часть действительно уйдет на программу с нулевым значением. Программа с 0 будет выглядеть так, как будто она работает на процессоре 200 кГц. !

Если вы когда-нибудь захотите истинно в реальном времени, где вы можете предотвратить вытеснение чего-либо еще, вы должны написать драйвер ядра или использовать расширение реального времени для Linux. У Redhat есть один под названием MRG, который позволяет обрабатывать данные в реальном времени в Linux. В этом случае «реальное время» означает нечто конкретное. В MRG пользователям из группы «реального времени» разрешено использовать эти расширения реального времени (которые могут постоянно загружать процессор, потому что они намеренно не используют удобный планировщик Linux).

1
24.02.2016, 01:17
2 ответа

Есть два способа:

  1. Использовать bash ' printf для печати и форматирования вывода (вместо echo )
  2. Используйте column -s: -t command

./list_packages openSUSE-2016-254 | column -s : -t 
zypper-aptitude.noarch     1.12.23-1.1 update needed
zypper-log.noarch          1.12.23-1.1 update needed
libsolv-debugsource        None not installed
libsolv-demo               None not installed
libsolv-demo-debuginfo     None not installed
libsolv-devel              None not installed
libsolv-devel-debuginfo    None not installed
libsolv-tools              0.6.14-1.1 update needed
libsolv-tools-debuginfo    None not installed
perl-solv                  None not installed
perl-solv-debuginfo        None not installed
python-solv                0.6.14-1.1 update needed
python-solv-debuginfo      None not installed
ruby-solv                  None not installed
ruby-solv-debuginfo        None not installed
libzypp                    15.19.5-1.1 update needed
libzypp-debuginfo          None not installed
libzypp-debugsource        None not installed
libzypp-devel              None not installed
libzypp-devel-doc          None not installed
zypper                     1.12.23-1.1 update needed
zypper-debuginfo           None not installed
zypper-debugsource         None not installed

5
27.01.2020, 23:16

Вы можете использовать что-то вроде: при чтении -r arg1 arg2; do awk '{print "package: $ arg1 version: $ arg1}'; done

Идея в том, что arg1 всегда будет первым словом в строке, arg2 будет вторым и т. д. используйте if grep и т. д. для достижения желаемой цели. Надеюсь, что это поможет!

0
27.01.2020, 23:16

Теги

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