Dlaczego ponowne uruchomienie jest wymagane tylko w przypadku niektórych aktualizacji?

18

Dlaczego Ubuntu nie wymaga ponownego uruchomienia w przypadku większej liczby aktualizacji? Wiem, że w przypadku aktualizacji jądra i takich rzeczy, jak sterowniki wideo, nie można załadować zmian bez ponownego uruchomienia. Ale ciekawi mnie bardziej podstawowe aktualizacje dość podstawowych pakietów, które często nie wymagają ponownego uruchamiania. Rzeczy takie jak Telepatia, glibc, gtk itp. Dlaczego pakiety tego typu nie wymagają ponownego uruchomienia w celu aktualizacji? Czy nowa wersja faktycznie działa zaraz po aktualizacji?

Innym przykładem może być Gwibber. Niedawno otrzymałem i zaktualizowałem gwibber za pośrednictwem Menedżera aktualizacji, gdy gwibber był uruchomiony. Aktualizacja zakończyła się powodzeniem. Czy gwibber uruchomiłby nową wersję bez ręcznego ponownego uruchomienia? Czy to samo dotyczy innych pakietów? (Wiem, że niektóre takie jak mysql i apache automatycznie uruchamiają się ponownie po aktualizacji). Czy w przypadku pakietów, które nie uruchamiają się automatycznie, czy nie może to stanowić problemu w kwestii bezpieczeństwa?

Dzieje się tak, ponieważ korzystam z systemu OS X od około tygodnia i prawie każda aktualizacja wymaga ponownego uruchomienia, nawet jeśli nie jest to związane ze sterownikiem jądra / sterownika wideo (o ile wiem - nie dostarczają dużo informacji ). Mój przyjaciel powiedział, że siły Apple uruchamiają się na większości aktualizacji „na wszelki wypadek”, byłoby dziwne, gdybyś nie uruchomił się ponownie. Windows jest najgorszy, ponieważ prawie każda instalacja / dezinstalacja lub aktualizacja wymaga ponownego uruchomienia (często zmuszając do wyłączania systemu na bardzo długo). Może to być nieco szerokie w przypadku tego miejsca, ale dlaczego różne systemy operacyjne radzą sobie z tym inaczej? Lub, bardziej konkretnie dla Ubuntu: dlaczego Ubuntu nie przestrzega bardziej rygorystycznych zasad restartu?

gregghz
źródło

Odpowiedzi:

23

Za każdym razem, gdy otwierasz lub uruchamiasz plik w systemie Windows, system Windows blokuje plik na miejscu (jest to uproszczenie, ale zwykle jest to prawda). Możliwe, że napotkałeś irytujące błędy, gdy nie możesz usunąć pliku, ponieważ inny proces ma wyłączną blokadę to. Dlatego za każdym razem, gdy system Windows musi się zaktualizować, konieczne jest ponowne uruchomienie komputera, aby zadziałało. System Windows ustawi w kolejce działania związane z zastępowaniem i usuwaniem plików podczas następnego uruchamiania (gdy nic nie jest zablokowane).

Z drugiej strony Linux ma mechanizm, w którym nie chodzi o plik, który jest zablokowany, ale o dane znajdujące się na dysku. Może się to wydawać trywialnym różnicowaniem, ale oznacza, że ​​rekord pliku w spisie treści systemu plików można usunąć bez zakłócania działania jakiegokolwiek programu, który już ma otwarty plik. Możesz więc usunąć plik, gdy jest on w trakcie wykonywania lub w inny sposób używany i będzie istniał na dysku, dopóki jakiś proces ma do niego otwarty uchwyt, nawet jeśli jego wpis w tabeli plików zniknął. Pozwala to Linuksowi całkowicie zastąpić program, gdy jest on uruchomiony, a następnie po prostu ponownie uruchomić program lub po prostu zaczekać, aż proces zakończy się naturalnie. Po zabiciu starej instancji

Tak więc, o ile określony plik nie jest w jakiś sposób wyjątkowy (jak na przykład plik obrazu jądra lub pliki należące do systemów o niskim poziomie), narzędzie do aktualizacji może zwykle aktualizować w miejscu w ten sposób. Jestem pewien, że istnieją specjalne przypadki i sytuacje, w których nie byłby to dobry pomysł, ale w większości przypadków jest w porządku.

Jeśli chodzi o to, dlaczego OS X to robi, ta teoria „na wszelki wypadek” wydaje się prawdopodobna.

Andrew Lambert
źródło
1
Aby zademonstrować punkt zdumiony, należy utworzyć plik test.py: #!/usr/bin/env python print raw_input()Uruchom to z python test.pyczy chmod +x test.py && ./test.pyi kiedy pojawi się monit o wprowadzenie informacji, rm test.py.
raylu
Powodem, dla którego większość programów użytkownika nie uruchamia się automatycznie jest to, że uważa się, że mają bardzo krótką żywotność i praktycznie nie mają przywilejów zmiany systemu. Jeśli martwisz się, możesz po prostu wylogować się, a następnie zalogować ponownie, spowoduje to zamknięcie wszystkich otwartych programów.
LassePoulsen 24.04.11
2
W szczególności dpkg instaluje pliki, pisząc je na foo.dpkg-new, a następnie zmieniając ich nazwę na każdy poprzedni plik, który tam był, co pozwala na płynne uaktualnienia bibliotek i plików wykonywalnych.
Colin Watson