Почему для некоторых обновлений требуется перезагрузка?

17

Почему Ubuntu не требует перезагрузки для большего количества обновлений? Я знаю, что для обновлений ядра и таких вещей, как видеодрайверы, он не может загружать изменения без перезагрузки. Но мне интересны более базовые обновления довольно фундаментальных пакетов, которые часто не требуют перезапуска. Такие вещи, как Telepathy, glibc, gtk и т. Д. Почему пакеты, подобные этой, не требуют обновления? Действительно ли новая версия работает сразу после обновления?

Другим примером может быть Gwibber. Недавно я получил и обновил gwibber через Менеджер обновлений во время работы gwibber. Обновление завершилось успешно. Будет ли gwibber запускать новую версию без перезагрузки вручную? И это то же самое для других пакетов? (Я знаю, что некоторые вроде mysql и apache автоматически перезапускаются при обновлении). Для пакетов, которые не перезапускаются автоматически, не может ли это быть проблемой безопасности для исправления безопасности?

Это происходит потому, что я запускаю OS X примерно неделю, и почти каждое обновление требует перезагрузки, даже если это не связано с драйвером ядра / видео (насколько я могу судить), они не дают вам много информации). Один из моих друзей сказал, что Apple запустится на большинство обновлений «на всякий случай», было бы странно, если бы вы не перезапустились. Windows хуже всего, потому что почти любая установка, удаление или обновление требует перезапуска (часто вынуждая выключения долгое время very ). Это может быть немного широким для этого места, но почему разные операционные системы справляются с этим так по-другому? Или, более конкретно, для Ubuntu: почему Ubuntu не выполняет более строгую политику перезапуска?

    
задан gregghz 24.04.2011 в 07:22
источник

1 ответ

23

Всякий раз, когда вы открываете или выполняете файл в Windows, Windows блокирует файл на месте (это упрощение, но обычно это правда). Возможно, вы столкнулись с теми раздражающими ошибками, где вы не можете удалить файл, потому что другой процесс имеет эксклюзивный замок на нем. Вот почему всякий раз, когда Windows должна обновляться сама, вам нужна перезагрузка, чтобы она вступила в силу. Windows будет приостанавливать действия по замене и удалению файлов при следующем запуске (когда ничто не блокирует что-либо).

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

Итак, до тех пор, пока конкретный файл не является каким-то особым (например, файл образа ядра или файлы, принадлежащие аналогичным низкоуровневым системам), программа обновления обычно может обновляться как на месте. Я уверен, что есть особые случаи и ситуации, когда это не будет хорошей идеей, но для большинства случаев это нормально.

Что касается того, почему OS X делает это, теория «на всякий случай» кажется правдоподобной.

    
ответ дан Andrew Lambert 24.04.2011 в 10:50
источник