為什麼 Linux 升級系統不用重啟,而Android和iOS卻必須重啟?
Android 不是不能免重啟,是沒有必要實現。
除了內核以外的所有部分都可以實現不重啟升級。但實現不重啟升級需要額外的工作,而重啟升級最省事。
GNU/Linux 最常用的場景是伺服器,伺服器通常有不能重啟的需求,所以必須實現不重啟升級,才能滿足需要。
而對於 Android/Linux 來說,通常不會用作伺服器,因而沒有必要實現不重啟升級的功能。沒有用戶會為不重啟升級功能付錢,所以當然就不進行這個功能的開發了。
解釋一下伺服器跟桌面的區別:伺服器通常只是一個刀片,沒有顯示器也沒有界面的,而桌面通常有圖形界面。不重啟操作系統的情況下,服務都可以完全無縫繼續運行。而圖形界面本身如果升級就需要重新啟動圖形界面(雖然不用重新啟動操作系統),不然這個升級不能生效。重新啟動圖形界面意味著大多數桌面應用將被關閉(想像一下你Linux重啟XWindowServer會是什麼情況),因而,不重啟操作系統的意義就不大了。
目前android 7的A/B 插槽式的系統更新,已經實現了升級的安裝過程無需重啟到recovery才能進行了。
提供這個特性的android設備擁有兩套完整的系統分區,分別稱為slot A與slot B。
顯然同時只能運行某一個slot上的系統。
如當前運行的是slot A的系統,則更新包會安裝在slot B,安裝完後,便可以直接重啟到另一個slot B。廠商需要為此準備更多的差分更新包。
比如一個設備出廠時的安全更新都是2016年12月級別:2017年1月級的安全更新把slot B升級後,下個月的安全更新既可能是從2016年12月直接跳到2017年2月級別,也可能是2017年1月級跳到2017年2月級
得益於2016年的android 7開始啟用了art的jit代碼,在這種沒有odex的情況下,啟動系統不再需要等待漫長的aot編譯了。aot編譯會推遲到收集了足夠多性能數據,並且設備處於充電且不使用時,以pgo guided編譯的形式進行,如此系統可以獲得更好的性能,且不需要編譯所有的代碼(節省儲存空間)。你說的 Linux 的升級更接近於安卓或 iOS 更新 app
安卓或 iOS 需要重啟的更新是整個系統
一般來說 Linux 升級內核也需要重啟的,除非用了 kgraft 或者 kpatchandroid的升級流程是重啟到另外一個系統(recovery),然後解壓鏡像
就算安裝的時候不重啟,如果android.jar更新了你也需要restart system service,如果內核更新了還需要重啟內核,你可以試一下su am restart,除了快一些,和重啟沒啥區別了
linux內核升級了的話也需要重啟或者kexec啊,你安裝了新內核正在運行的還是舊內核其他人都講的很好了,
如果你的linux升級了內核,一般也是需要重啟的。你的「升級不重啟」應該只是升級了應用軟體,相當於在安卓上升級了 你的自帶的應用級的app。如果你的整個linux系統都在一個squashfs裡面, 那你升級完了也需要重啟.
樓上說的已經很詳細了。
Linux啟動後也需要計算機載入一個內核。
這個內核升級後,似乎目前還不能在不啟動的情況下成為runtime.不過,做到不重啟或者偽裝成不重啟,大概是可以解決的。只是技術上要繁瑣一點。你說的linux升級系統是升級應用吧,升級內核試試,看看要不要重啟。當然升級內核你也可以不重啟,效果嘛就是沒升級一樣。
討論前提不成立。Android的更新是包括內核的,方便起見直接進入另外一個系統(recovery)中對這個系統進行刷寫;GNU/Linux更新包的時候不用重啟,更新內核的時候也得重啟。GNU/Linux的升級(更新包)與Android更新APP更加相似。所以題中隱含的兩者差不多是不成立的。Android刷機包,經常見到的,是Android的內核、框架和應用一起更新,所以選擇啟動到一個簡易的臨時系統中直接刷寫更方便。
linux更新軟體時各種系統services都有按照依賴關係的restart機制。
android只有app層面有這個東西。android更新app不需要reboot。
一般linux在版本內更新可以不重啟,但是如果像類似android一般的跨版本升級也不能不重啟吧。
Windows安裝卸載優良軟體也不需要重啟。一個系統可以比喻成公司。linux伺服器系統核心是總裁,十分能幹,啥活都幹了(實際是公司業務簡單沒啥活),其他人隨時可以更換。Windows總裁比較傻,需要一幫coo cfo, 這幫高管還有一群小弟,換小弟有時都會全公司停擺,比如卸載360,360就跟高管說,開除我不要緊,小心點你的艷照噢。於是高管跪了,總裁也跟著跪了,得嘞,重啟吧。安卓蘋果是一樣的,人機交互需要資源太多,相應許可權就比較大,為了防止意外還是重啟安全。有一種遊戲版本叫硬碟版,這就屬於比較精良的遊戲,來不用安裝,走不用重啟,作風優良啊。
你覺得是花時間搞黑科技搞超薄搞3touth能賺錢還是花時間去解決一個根本不是問題的問題,重啟更新系統?
看升級了那些東西決定是不是需要重啟
@pansz 已經說得很好了,場景不同。補充一點,Linux升級內核早就不用重啟操作系統了。Android等手持設備可以隨時重啟整個系統,尤其是涉及到GUI部分還可能必須重啟; RHEL/SUSE/Ubuntu等Linux系統一般應用於伺服器/大型機/雲,不能隨意重啟操作系統。但是,自從2015年4月Linux kernel4.0發布以後,Linux升級內核大多數情況下也可以不重啟操作系統了,這得益於一個叫做live patching(實時補丁)的功能合併進kernel main line,那意味著你的Linux系統甚至可以連續運行幾年乃至十幾年,此功能深受運維者歡迎。
不重啟怎麼讓人感覺已經升級了
誰說linux升級不用重啟?bash如果升級了,通常是要logout然後再login的。glibc如果升級了,通常推薦退出所有進程然後再重新運行的。kernel/driver如果升級了,通常必須重啟。Xorg/KDE等如果升級了,通常要退出KDE/Xorg,然後再運行的。等等。
以上和Windows的重啟,其實也差不了多少。Windows設計時無非沒有特意減少升級的麻煩,加上獨立軟體開發商有時為了省事和減少麻煩,主動要求有時不必要的重啟。