Tại sao chỉ cần khởi động lại trên một số cập nhật?


18

Tại sao Ubuntu không yêu cầu khởi động lại trên nhiều bản cập nhật hơn? Tôi biết rằng đối với các cập nhật kernel và những thứ như trình điều khiển video, nó không thể tải các thay đổi mà không cần khởi động lại. Nhưng tôi tò mò về các bản cập nhật cơ bản hơn của các gói cơ bản thường không yêu cầu khởi động lại. Những thứ như Thần giao cách cảm, glibc, gtk, v.v ... Tại sao các gói như thế này không yêu cầu khởi động lại để được cập nhật? Là phiên bản mới thực sự chạy ngay sau khi cập nhật?

Một ví dụ khác là Gwibber. Gần đây tôi đã nhận được và cập nhật lên gwibber thông qua Trình quản lý cập nhật trong khi gwibber đang chạy. Bản cập nhật hoàn thành thành công. Gwibber sẽ chạy phiên bản mới mà không tự khởi động lại? Và điều đó có giống với các gói khác không? (Tôi biết một số như mysql và apache tự động khởi động lại trên một bản cập nhật). Đối với các gói không tự động khởi động lại, đó có thể là một phần của vấn đề bảo mật để khắc phục bảo mật không?

Điều này xuất hiện bởi vì tôi đã chạy OS X được khoảng một tuần và hầu như mọi bản cập nhật đều yêu cầu khởi động lại ngay cả khi nó không liên quan đến trình điều khiển kernel / video (theo như tôi có thể nói - họ không cung cấp cho bạn nhiều thông tin ). Một người bạn của tôi nói rằng lực lượng Apple khởi động lại trên hầu hết các bản cập nhật "chỉ trong trường hợp" sẽ thật kỳ lạ nếu bạn không khởi động lại. Windows là tồi tệ nhất vì hầu như mọi cài đặt / gỡ cài đặt hoặc cập nhật đều yêu cầu khởi động lại (thường buộc phải tắt máy phải mất một thời gian rất dài). Điều này có thể hơi rộng đối với địa điểm này, nhưng tại sao các hệ điều hành khác nhau lại xử lý việc này quá khác nhau? Hoặc, cụ thể hơn đối với Ubuntu: tại sao Ubuntu không tuân theo chính sách khởi động lại nghiêm ngặt hơn?

Câu trả lời:


23

Bất cứ khi nào bạn mở hoặc thực thi một tệp trong Windows, Windows sẽ khóa tệp tại chỗ (đây là một sự đơn giản hóa, nhưng thường là đúng.) Bạn có thể đã gặp phải những lỗi gây phiền nhiễu khi bạn không thể xóa tệp vì một quy trình khác có khóa độc quyền trên nó Đây là lý do tại sao bất cứ khi nào Windows phải tự cập nhật, bạn cần khởi động lại để nó có hiệu lực. Windows sẽ xếp hàng các hoạt động thay thế và xóa tệp khi nó khởi động tiếp theo (khi không có gì khóa trên bất cứ thứ gì.)

Mặt khác, Linux có một cơ chế trong đó không phải là tệp bị khóa mà là dữ liệu cơ bản trên đĩa. Điều này có vẻ khác biệt nhỏ nhưng điều đó có nghĩa là bản ghi của tệp trong mục lục của hệ thống tệp có thể bị xóa mà không làm phiền bất kỳ chương trình nào đã mở tệp. Vì vậy, bạn có thể xóa một tệp trong khi nó vẫn đang thực thi hoặc sử dụng và nó sẽ tiếp tục tồn tại trên đĩa miễn là một số quy trình có xử lý mở cho nó ngay cả khi mục nhập của nó trong bảng tệp không còn nữa. Điều này cho phép Linux thay thế hoàn toàn một chương trình trong khi nó vẫn đang chạy và sau đó chỉ cần khởi động lại chương trình hoặc chỉ chờ quá trình thoát tự nhiên. Một khi cá thể cũ bị giết,

Vì vậy, miễn là một tệp cụ thể không đặc biệt theo một cách nào đó (ví dụ như tệp hình ảnh hạt nhân hoặc các tệp thuộc các hệ thống cấp thấp tương tự), trình cập nhật thường có thể cập nhật tại chỗ như thế này. Tôi chắc chắn có những trường hợp đặc biệt và tình huống trong đó điều này sẽ không phải là một ý tưởng tốt, nhưng đối với hầu hết các trường hợp thì nó vẫn ổn.

Đối với lý do tại sao OS X làm điều đó, lý thuyết "chỉ trong trường hợp" nghe có vẻ hợp lý.


1
Để thể hiện quan điểm của Amazed, hãy tạo tệp test.txt: #!/usr/bin/env python print raw_input()Chạy tệp này với python test.pyhoặc chmod +x test.py && ./test.pyvà, khi nó nhắc bạn nhập liệu , rm test.py.
raylu

Lý do mà hầu hết các chương trình người dùng không được khởi động lại tự động là vì chúng được cho là có tuổi thọ rất ngắn và hầu như không có quyền riêng tư để thay đổi hệ thống. Nếu bạn lo lắng, bạn chỉ có thể đăng xuất và sau đó đăng nhập, điều này sẽ đóng tất cả các chương trình bạn đã mở.
LassePoulsen

2
Cụ thể, dpkg cài đặt các tệp bằng cách ghi chúng vào foo.dpkg-new và sau đó đổi tên chúng trên đầu của bất kỳ tệp nào trước đó, cho phép nâng cấp trơn tru các thư viện và tệp thực thi.
Colin Watson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.