Co się stanie, jeśli przypadkowo pozostawię uruchomioną aplikację i kliknę „Zainstaluj teraz” w Aktualizatorze oprogramowania?

22

Pojawi się narzędzie do aktualizacji oprogramowania update-manageri wyświetli na przykład aktualizacje zabezpieczeń dla przeglądarki Firefox. Oczywiście kliknę „Zainstaluj teraz”, aby kontynuować.

Co się jednak stanie, jeśli nadal będę mieć uruchomionego Firefoksa? Czy nadal będzie aktualizować Firefoksa? Czy aktualizacja zostanie pominięta i pojawi się ponownie następnym razem? Czy aktualizacja zmusi Firefoksa do zamknięcia, a może awarii? Czy to tylko częściowo zaktualizuje oprogramowanie i ewentualnie przerwie instalację Firefoksa?

stopa
źródło
10
Nic się nie dzieje, Firefox jest otwarty w Ram. Czasami wykrywa aktualizację i wyświetla polecenie ponownego uruchomienia przeglądarki. Ale może ktoś z większym wglądem i referencjami może dać lepszą odpowiedź.
pLumo
3
Nie wiem konkretnie o Ubuntu, ale w Arch (i nie sądzę, żeby było inaczej w tym przypadku), aktualizacja firefoxa pod stopami podczas działania wydaje się działać, ale wtedy pierwsza rzecz, którą robisz w firefoxie, powoduje awarię rzecz. Zawsze przypisywałem to złożonemu charakterowi współczesnych przeglądarek, które ładują w czasie wykonywania wszelkiego rodzaju rzeczy. Ale Firefox jest jedyną rzeczą, która mi się przytrafia.
tomsmeding
2
Firefox zatrzyma się przy następnym otwarciu karty i poinformuje Cię, że należy go ponownie uruchomić. Inne aplikacje mogą robić coś innego.
Michael Hampton

Odpowiedzi:

40

Musisz myśleć o systemie Windows. Unix zrobił to dobrze, a później system Windows pojawił się i opracował niewłaściwe sposoby działania.

W systemie Windows zastąpienie pliku, który jest używany przez uruchomiony proces, może mieć zły wpływ na ten proces. Proces będzie odwoływał się do lokalizacji w tym pliku i uzyskiwał z niego nieprawidłowe informacje, zwykle z katastrofalnymi skutkami. Dlatego aktualizacja systemu Windows zazwyczaj wymaga ponownego uruchomienia, aby upewnić się, że wszystkie procesy używają poprawnych wersji bibliotek itp.

W systemie Unix, gdy plik zostanie otwarty przez proces, ten sam plik będzie zawsze dostępny dla procesu, nawet jeśli oryginalny plik zostanie usunięty z systemu plików .

Po aktualizacji system plików będzie zawierał inną wersję pliku, a wszystkie procesy, które rozpoczną się po aktualizacji, wykorzystają ten nowy plik. Jednak w przeciwieństwie do systemu Windows wszystkie stare procesy uniksowe będą nadal korzystać z oryginalnych plików, które rozpoczęły. Mimo że nie są już dostępne za pośrednictwem systemu plików, pliki te będą przechowywane tak długo, jak długo korzysta z nich jakikolwiek proces. Ostatecznie, gdy żaden proces nie korzysta z plików, stara wersja plików zostanie ostatecznie usunięta.

Możesz oczywiście zrestartować Firefox (lub inne procesy), jeśli chcesz od razu skorzystać z aktualizacji. Wybór nalezy do ciebie.

Ray Butterworth
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Thomas Ward
18

Zazwyczaj aktualizacja programu, gdy jest już otwarty, nie stanowi problemu - jak wyjaśnili to inni autorzy, działający proces może być kontynuowany, nawet jeśli jego plik wykonywalny zostanie usunięty.

Jednak ze względu na wieloprocesowy model Firefoksa po aktualizacji może pojawić się monit o ponowne uruchomienie. Wynika to z faktu, że Firefox odradza nowe procesy izolowania różnych stron internetowych, więc jeśli odradza się nowy proces po jego aktualizacji, ale przed ponownym uruchomieniem Firefoksa, nowy proces będzie nowszą wersją Firefoxa niż reszta przeglądarki. Może to powodować różne problemy, więc Firefox może poprosić o ponowne uruchomienie przed zezwoleniem na kontynuację.

Nawiasem mówiąc, Chrome unika tego , wykorzystując proces „zygoty”, który nic nie robi; gdy przeglądarka musi zrestartować nowy proces, zamiast prosić system operacyjny o ponowne uruchomienie pliku wykonywalnego przeglądarki (który wykonałby ewentualnie zaktualizowaną wersję binarną), prosi proces zygote o zduplikowanie się, a jedna z kopii staje się normalnym rendererem proces.

Josh
źródło
1
Ponadto dzięki złożonej aplikacji, takiej jak Firefox, wszystko, czego może potrzebować, aby poradzić sobie ze wszystkim, co napotka, nie jest ładowane do pamięci podczas uruchamiania programu. Tak więc komponenty ładowane w razie potrzeby mogą podobnie powodować niedopasowanie wersji. Często miałem zawieszonego Firefoksa podczas aktualizacji.
fixer1234
To nie tylko przeglądarki z modelami wieloprocesowymi, ale każda sytuacja, w której biblioteki są używane do IPC i biblioteki mogą być ładowane przed i po aktualizacji - chociaż przeglądarki są prawdopodobnie najbardziej znanym przykładem tego dnia (interakcja COM w systemie Windows jest dość powszechne oznacza, że ​​wiele innych programów może pośrednio zrobić coś takiego). Nie mogę sobie również wyobrazić, że Chrome całkowicie omija ten problem z procesem zygote - czy naprawdę ładuje każdą bibliotekę, której może potrzebować w dowolnym momencie uruchamiania?
Voo
@ Voo pyta: „czy naprawdę ładuje każdą bibliotekę, której może potrzebować w dowolnym momencie uruchamiania?”. Nie znam tego konkretnego przykładu, ale ogólnie nie jest to konieczne. Wszystko, co jest wymagane, to upewnić się, że każda możliwa biblioteka jest otwierana podczas uruchamiania, co gwarantuje, że poprawne dane zostaną odczytane, jeśli kiedykolwiek będą potrzebne. Otwarcie pliku (lub kilkudziesięciu plików) jest trywialnym wydatkiem w porównaniu z ładowaniem wszystkiego, co zawierają.
Ray Butterworth,
@Ray Fun fakt: dlopen bierze tylko nazwę pliku, ale nie deskryptory plików, więc może to nie być tak proste, jak się spodziewałeś (możesz bawić się z / proc, ale jest to notorycznie odmienne w * nixach). Ale większym problemem jest to, że wyeliminowałoby to większość przypadków użycia, w których ładowanie dynamiczne jest używane na początku.
Voo
@Voo, przepraszam, błędnie myślałem, że ten komentarz jest w wątku zorientowanym na uniks, a nie o Windowsie i bibliotekach DLL.
Ray Butterworth,