Является ли $ () подоболочкой?

Можно попытаться использовать такие инструменты, как htop , и выполнить сортировку по использованию ЦП/ОЗУ/времени ЦП.

sudo apt-get install htop && htop

Вы также можете использовать iotop для проверки любого узкого места ввода-вывода,

sudo apt-get install iotop && sudo iotop

или

sudo iotop -P --only

-121--138937-

Следующий сценарий работает для меня, но он требует, чтобы у вас было только одно окно Chrome, и это окно было активным. Это должно быть легко подправить его или улучшить.

WINID=$(xdotool search --name 'Google Chrome' | head -n 1)
WINID_HEX=$(printf "0x%x" $WINID)

while true
do
        xwininfo -id $WINID_HEX | grep Gmail
        if [ "$?" -ne 0 ]
        then
                xdotool key --window $WINID ctrl+Tab
        else
                break
        fi
        sleep 2
done

Возможно, есть много других способов сделать это:

  • Использование Chromium и изменение его исходного кода
  • Написание расширения для Chrome, которое переключится на правую вкладку при выполнении определенного условия
  • Использование таких инструментов, как xmacro
  • и т.д.

-121--45722-

Я бы начал с чего-то такого простого, как свободного , чтобы исключить узкое место ОЗУ. Вот пример вывода:

$ free
             total       used       free     shared    buffers     cached
Mem:        895476     851080      44396          0      11008     557828
-/+ buffers/cache:     282244     613232
Swap:            0          0          0

Действительно важна строка -/+ буферы/кэш: 282244 613232 . Это означает, что из моих 895476 КБ памяти, доступной в пользовательском пространстве, 282244 КБ используются процессами, а 613232 КБ свободны (эта память в основном используется ядром для буферов и кэша, но может быть освобождена при необходимости).

Если вам постоянно не хватает памяти, попробуйте купить больше, хотя это не так просто, чтобы потреблять 4 ГБ с помощью только просмотра веб-страниц. zram будет меньше решением (если вообще), так как оно использует сжатие, чтобы сделать более доступной ОЗУ, а сжатие использует CPU, замедляя работу системы.

Также, поскольку вы упоминаете просмотр веб-страниц, я предлагаю вам посмотреть на PureMoon браузер. Это форк Firefox, специально предназначенный для нетбуков и более медленных компьютеров.

53
09.05.2018, 17:38
1 ответ

$(…)является подоболочкой по определению :это копия состояния среды выполнения оболочки¹, и изменения в состоянии, сделанные в подоболочке, не влияют на родителя. Подоболочка обычно реализуется путем разветвления нового процесса (, но некоторые оболочки могут оптимизировать это в некоторых случаях ).

Это не подоболочка, из которой можно получить значения переменных. Если бы изменения переменных влияли на родителя, это не было бы подоболочкой. Это подоболочка, чьи выходные данные родитель может получить. Подоболочка, созданная $(…), имеет свой стандартный вывод, установленный в канал, и родитель читает из этого канала и собирает вывод.

Есть несколько других конструкций, которые создают подоболочку. Я думаю, что это полный список для bash:

  • Подоболочка для группировки:( … )ничего не делает, кроме создания подоболочки и ожидания ее завершения ). В отличие от { … }, который группирует команды исключительно для синтаксических целей и не создает подоболочку.
  • Фон:… &создает подоболочку и не ждет ее завершения.
  • Конвейер:… | …создает две подоболочки, одну для левой -стороны и одну для правой -стороны, и ожидает завершения работы обеих. Оболочка создает канал и соединяет стандартный вывод левой стороны -с концом канала записи, а стандартный ввод правой стороны -— с концом чтения. В некоторых снарядах (кш88, кш93, зш,bash с установленным параметромlastpipeи действующим ), правая сторона -работает в исходной оболочке, поэтому конструкция конвейера создает только одну подоболочку.
  • Подстановка команд :$(…)(, также пишется как `…`), создает подоболочку со стандартным выводом, установленным в канал, собирает вывод в родительском элементе и расширяет до этого вывода, за вычетом завершающих строк новой строки. (И вывод может подвергаться дальнейшему разделению и подстановке, но это уже другая история.)
  • Подстановка процесса:<(…)создает подоболочку со стандартным выводом, установленным на канал, и расширяется до имени канала. Родительский процесс (или какой-либо другой процесс )может открыть канал для связи с подоболочкой. >(…)делает то же самое, но с каналом на стандартном вводе.
  • Сопроцесс:coproc …создает подоболочку и не ожидает ее завершения. Стандартный ввод и вывод подоболочки настроены на канал, а родитель подключен к другому концу каждого канала.

¹В отличие от запуска отдельной оболочки .

101
27.01.2020, 19:33

Теги

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