` /etc/zshenv `запускается дважды для интерактивной оболочки входа без -в iTerm2

Вероятно, для начала мы можем исключить conv=sync. Он делает что-то совсем другое, что, как я полагаю, вам не нужно :-).

pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather than NULs


oflag=directне синхронизируется автоматически сама по себе.[ *]

conv=fsyncотличается от oflag=sync. oflag=syncэффективно синхронизируется после каждого выходного блока. conv=fsyncвыполняет одну синхронизацию в конце.

Конечный результат тот же, но производительность на этом пути отличается :-).

  1. oflag=syncможет быть значительно медленнее. Вы можете смягчить это, увеличив размер блока.

  2. Если кэши, специфичные для устройства -, велики[1], это повлияет на отображаемый прогресс, например. опцией status=progress.

  3. Если вы , а не используете oflag=direct, то в кэше системных страниц может накапливаться большое количество записей. Это наращивание -повлияет на прогресс, который вы видите[2]. Но также Linux иногда плохо реагирует на сборку -и снижает производительность для всех устройств[3].


[1] «Очевидно, ваше оборудование имеет сотни мегабайт кеша... В моем случае это связано с тем, что ядро ​​[фактически работает внутри виртуальной машины]».https://unix.stackexchange.com/a/420300/29483

[2] Почему конвейер gunzip в dd замедляется в конце?

[3] Система тормозит при выполнении больших операций чтения/записи на внешних дисках

[ *] Когда вы записываете напрямую в узел блочного устройства , Linux синхронизирует блочное устройство, когда оно закрыто (и не открыто какой-либо другой программой ). См.:Кэш блочного устройства и кэш-память. файловая система . Иногда я вижу людей, которые не используют явную синхронизацию при записи на блочное устройство. Часто будет казаться, что он работает нормально... пока не перестанет. Поэтому я рекомендую хотя бы использовать conv=fsync.

1
11.07.2020, 00:27
1 ответ

Учитывая порядок сообщений, что-то в вашем .zshrcприводит к выполнению /etc/zshenv. Это может быть либо обращение к источнику /etc/zshenv, либо вызов другого экземпляра zsh. Ищите такие вещи, как

. /etc/zshenv
source /etc/zshenv
zsh -c …
zsh /path/to/file
/path/to/file                             # which starts with #!/usr/bin/env zsh

или их варианты.

Обратите внимание, что оскорбительная строка может находиться либо в самом файле .zshrc, либо в другом файле, источником которого она является.

Вы можете запустить zsh -xили zsh -f -x ~/.zshrcи найти вызывающую ошибку команду в трассировке. Это может быть проще, чем найти его в исходном коде.

Сложнее всего обнаружить случай выполнения другой программы, которая оказывается zsh-скриптом. Для этого может быть проще отслеживать доступ к /etc/zshenv. С другой стороны, если так и происходит, то это совершенно нормально и с этим ничего не поделаешь.

2
18.03.2021, 23:20

Теги

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