Перенаправление производит в файл, применяют блокировку на файл?

Для добавления шрифтов, в то время как X-сервер выполняет команду использования:

xset fp+ /path/to/dir/with/fonts/

И, в случае необходимости:

xset fp rehash

Для создания этого постоянным добавляют FontPath строка к Вашему xorg.conf

30
07.07.2012, 22:57
2 ответа

Так как Вы используете >>, что означает, добавляют, каждая строка вывода от каждого экземпляра будет добавлена в порядке, это произошло.

Если Ваш сценарий произвел печать 1\n через 5\n с одной второй задержкой между каждым и экземпляром два запускается 2.5 секунды спустя, Вы получите это:

1
2
1
3
2
4
3
5
4
5

Таким образом отвечать на Ваш вопрос: Нет.

18
27.01.2020, 19:38

Системы Unix в общем и целом избегают обязательных блокировок. Существует несколько случаев, где ядро заблокирует файл против модификаций пользовательскими программами, но не, если оно будет просто записано другой программой. Никакая система Unix не заблокирует файл, потому что программа пишет в него.

Если Вы хотите, чтобы параллельные экземпляры Вашего сценария не наступали на пальцы ног друг друга, необходимо использовать явный механизм блокировки, такой как flock lockfile.

Когда Вы открываете файл для добавления, который >> делает, каждая программа, как гарантируют, всегда запишет в конец файла. Таким образом, вывод нескольких экземпляров никогда не будет перезаписывать друг друга, и если они будут сменяться для записи, то их вывод будет в том же порядке как записи.

Плохая вещь, которая могла произойти, состоит в том, если один из экземпляров пишет несколько блоков вывода и ожидает, что они выйдут вместе. Между записями consecutives одним экземпляром другие экземпляры могут выполнить свои собственные записи. Например, если экземпляр 1 запись foo, затем экземпляр 2 записи hello и только затем экземпляр 2 записи bar, затем файл будет содержать foohellobar.

Процесс эффективно пишет в файл, когда он звонит write системный вызов. Вызов к write является атомарным: каждый вызов к write пишет последовательность байтов, которые не будут прерваны другими программами. Часто существует предел сколько данных единственный вызов к write эффективно запишет: для больших размеров только записано начало данных, и приложение должно звонить write снова. Кроме того, много программ выполняют буферизацию: они накапливают данные в области памяти, затем выписывают эти данные в одном блоке. Некоторые программы сбрасывают буфер вывода после полной строки или другого значимого разделения. С такими программами можно ожидать, что целые строки будут непрерывны, пока они не являются слишком длинными (несколько килобайтов; это зависит от ОС). Если программа не сбрасывает в значимых местах, но только на основе размера буфера, Вы могли бы видеть что-то как 4 КБ от одного экземпляра, то 4 КБ от другого экземпляра, с другой стороны 4 КБ от первой инстанции и так далее.

23
27.01.2020, 19:38

Теги

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