Apa yang terjadi jika saya secara tidak sengaja membiarkan aplikasi berjalan dan klik "Instal Sekarang" di Pembaruan Perangkat Lunak?

22

Pembaruan Perangkat Lunak update-managermuncul dan menunjukkan pembaruan keamanan untuk Firefox, misalnya. Secara alami, saya akan mengklik "Instal Sekarang" untuk melanjutkan.

Namun, apa yang terjadi jika Firefox saya masih berjalan ketika saya melakukan ini? Apakah masih akan memperbarui Firefox? Apakah pembaruan akan dilewati dan muncul kembali di lain waktu? Apakah pembaruan akan memaksa Firefox ditutup dan mungkin macet? Apakah hanya sebagian memperbarui perangkat lunak dan mungkin merusak instalasi Firefox saya?

finefoot
sumber
10
Tidak ada yang terjadi, Firefox terbuka di Ram. Terkadang mendeteksi pembaruan dan memberitahu Anda untuk me-restart browser. Tetapi mungkin seseorang dengan lebih banyak wawasan dan referensi dapat memberikan jawaban yang lebih baik.
pLumo
3
Saya tidak tahu secara khusus tentang Ubuntu, tetapi pada Arch (dan saya tidak berpikir itu jauh berbeda dalam hal ini), memperbarui firefox di bawah kakinya saat menjalankan tampaknya berfungsi, tetapi kemudian hal pertama yang Anda lakukan di firefox membuat crash. benda. Saya selalu hanya mengaitkan hal itu dengan sifat kompleks dari peramban modern, runtime-loading semua jenis barang. Tetapi firefox adalah satu-satunya hal yang terjadi pada saya.
mulai
2
Firefox akan berhenti saat Anda membuka tab lain kali, dan memberi tahu Anda bahwa itu perlu dimulai ulang. Aplikasi lain dapat melakukan sesuatu yang berbeda.
Michael Hampton

Jawaban:

40

Anda pasti memikirkan Windows. Unix melakukannya dengan benar, dan kemudian, Windows datang dan mengembangkan cara yang salah dalam melakukan sesuatu.

Dengan Windows, mengganti file yang sedang digunakan oleh proses yang berjalan dapat sangat mempengaruhi proses itu. Proses akan mereferensikan lokasi di dalam file itu dan mendapatkan informasi yang salah darinya, biasanya dengan hasil bencana. Itu sebabnya pembaruan Windows umumnya membutuhkan reboot untuk memastikan bahwa semua proses menggunakan versi perpustakaan yang benar, dll.

Dengan Unix, setelah file dibuka oleh suatu proses, file yang sama akan selalu tersedia untuk proses tersebut bahkan jika file asli dihapus dari sistem file .

Setelah pembaruan, sistem file akan berisi versi file yang berbeda, dan semua proses yang dimulai setelah pembaruan akan menggunakan file baru itu. Tapi, tidak seperti Windows, semua proses Unix lama akan terus menggunakan file asli yang mereka mulai. Meskipun tidak lagi dapat diakses melalui sistem file, file-file itu akan tetap ada selama proses apa pun menggunakannya. Akhirnya, ketika tidak ada proses yang menggunakan file, versi file lama akhirnya akan dihapus.

Anda tentu saja dapat memutuskan untuk memulai kembali Firefox (atau proses lain) jika Anda ingin mendapatkan manfaat pembaruan segera. Pilihan ada padamu.

Ray Butterworth
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Thomas Ward
18

Biasanya, memperbarui program saat sudah terbuka tidak ada masalah - seperti yang dijawab penjawab lain, proses yang berjalan dapat terus berjalan bahkan jika executable-nya dihapus.

Namun, karena model multi-proses Firefox, Anda mungkin mendapatkan prompt untuk memulai kembali setelah pembaruan. Ini karena Firefox memunculkan proses baru untuk mengisolasi situs web yang berbeda, jadi jika itu memunculkan proses baru setelah Anda memperbaruinya tetapi sebelum Anda me-restart Firefox, proses baru akan menjadi versi Firefox yang lebih baru daripada browser lainnya. Ini dapat menyebabkan berbagai masalah, jadi Firefox mungkin meminta Anda memulai kembali sebelum mengizinkan Anda untuk melanjutkan.

Kebetulan, Chrome menghindari ini dengan menggunakan proses "zygote" yang tidak melakukan apa-apa; ketika browser perlu memunculkan proses baru, alih-alih meminta OS untuk mengeksekusi browser yang dapat dieksekusi lagi (yang akan mengeksekusi biner yang mungkin diperbarui), ia meminta proses zygote untuk menggandakan dirinya, dan salah satu salinan kemudian menjadi renderer normal proses.

Josh
sumber
1
Juga, dengan aplikasi yang kompleks seperti Firefox, semua yang diperlukan untuk menangani apa pun yang dihadapinya tidak dimuat ke dalam memori ketika program diluncurkan. Jadi komponen yang dimuat sesuai kebutuhan juga dapat membuat ketidakcocokan versi. Firefox saya sering hang ketika memperbarui ketika sedang berjalan.
fixer1234
Bukan hanya browser dengan model multi-proses, tetapi situasi apa pun di mana pustaka digunakan untuk IPC dan pustaka dapat dimuat sebelum dan setelah pembaruan - meskipun browser mungkin adalah contoh paling terkenal saat ini (COM interop di Windows sedang cukup lazim berarti lebih banyak program secara implisit dapat melakukan sesuatu seperti ini). Saya juga tidak dapat membayangkan bahwa Chrome sepenuhnya menghindari masalah ini dengan proses zygote - apakah itu benar-benar memuat setiap pustaka yang mungkin diperlukan pada saat startup?
Voo
@ Voo bertanya "apakah ini benar-benar memuat setiap pustaka yang mungkin dibutuhkan pada saat startup?". Saya tidak tahu tentang contoh khusus ini, tetapi secara umum itu tidak perlu. Semua yang diperlukan adalah untuk memastikan bahwa setiap perpustakaan yang mungkin dibuka pada saat startup, dengan demikian menjamin bahwa data yang benar akan dibaca jika diperlukan. Membuka file (atau lusinan file) adalah biaya sepele dibandingkan dengan memuat semua yang dikandungnya.
Ray Butterworth
@Ray Fakta menyenangkan: dlopen hanya mengambil nama file tetapi bukan deskriptor file sehingga mungkin tidak sesederhana yang Anda kira (Anda dapat bermain-main dengan / proc tapi itu sangat berbeda di sepanjang * nixes). Tetapi masalah yang lebih besar adalah bahwa hal itu akan menghilangkan sebagian besar kasus penggunaan di mana pemuatan dinamis digunakan untuk memulai.
Voo
@Vo, maaf, saya keliru mengira komentar ini berada di utas berorientasi unix, bukan tentang Windows dan dll.
Ray Butterworth