команда в.bashrc выполняется дважды

Пользователь ilkkachu дал хорошее объяснение того, как буферизация влияет на вывод. Мой ответ описывает, что произойдет, если вы устраните буферизацию, например. заменив вызовы fprintfвызовами write. В этом случае вы получите строго чередующиеся as и bs. Это связано с тем, что вызов writeвызывает перепланирование :записи в блоки одного процесса, передачу очереди другому процессу и т.д.

Давайте представим, что произойдет, если вызов записи будет не блокироваться. Тогда мы должны были бы рассмотреть шкалы времени :, вы получили бы гораздо более длинные прогоны aс и bс, чем просто один или два за раз, потому что современные процессоры способны выполнять миллиарды инструкций в секунду, но частота планирования обычно составляет от 100 Гц до 1000 Гц. Процесс сможет выполнить до десятков миллионов инструкций, прежде чем он будет вытеснен, а другой процесс будет запланирован для запуска. Даже принимая во внимание накладные расходы системных вызовов, это дало бы процессу время для печати очень длинных строк последовательных aс или bс.

-121 ---118524 ​​-

Не требуется. Формат CIDR(10.0.2.15/24)содержит сетевую маску, из которой можно вычислить номер сети и широковещательный адрес с предоставленным IP-адресом.

0
21.09.2020, 16:53
1 ответ

У вас тут несколько неправильных представлений. Любые команды в .bashrcвыполняются каждый раз, когда вы запускаете новую интерактивную оболочку без входа -. Это означает, что каждый раз, когда вы открываете новый терминал, они будут запускаться снова. Каждый раз, когда вы запускаете bash, они будут запускаться снова.

Следующая проблема заключается в том, что если вы не настроили свой sudoна выполнение без пароля, ваша команда даже не запустится. Он просто зависнет в ожидании пароля. Вам вообще нужно sudo? Разве piне ваше собственное имя пользователя? Все команды в вашем .bashrcбудут выполняться от имени вашего пользователя, вам не нужно для них вызывать sudo.

Наконец, запуск терминала не имеет значения. Команда не будет запущена в этом терминале, терминал просто останется там.

Вам нужно добавить эту команду в /etc/crontabи настроить ее на запуск от имени пользователя piпри перезагрузке. Запустите sudo nano /etc/crontabи добавьте эту строку в файл:

@reboot pi python3 /path/to/script.py

Это скажет вашей системе запускать команду python3 /path/to/script.pyот имени пользователя piпри каждой перезагрузке.

4
18.03.2021, 23:03

Теги

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