Tắt máy duyên dáng Linux


17

Tôi đã nghe nói rằng "shutdown -h now" không phải là một lệnh tắt duyên dáng bởi vì nó thực hiện một cái gì đó giống như "kill -9" cho tất cả các quy trình, trái ngược với "kill -15".

Điều này có đúng không, và nếu vậy, cách tắt máy nào duyên dáng hơn để đảm bảo mọi thứ có thời gian để dọn dẹp sau khi tự nó?

Ps Sử dụng CentOS, Ubuntu và Debian là chủ yếu.


Tôi sẽ đợi người khác bấm chuông, nhưng điều đó không đúng chút nào. -h chỉ bảo nó đặt hệ thống vào chế độ HALT chứ không phải khởi động lại. Và "bây giờ" chỉ có nghĩa là không có thời gian ân hạn cho người dùng tắt máy. Không chắc chắn bất kỳ điều nào trong số này sẽ sửa đổi hành vi giết người thực sự của việc tắt máy
Jeffery Smith

4
Vui lòng đọc trang hướng dẫn để tắt máy ( man shutdown). Nó giải thích điều này hoàn toàn.
Andrew Schulman

Câu trả lời:


15

shutdown -h nowsẽ gọi /etc/rc.d/rchoặc /etc/init.d/rc. Các rckịch bản sẽ gọi kịch bản giết cho runlevel mới (0 -h, 6 cho -r), tiếp theo là bất kỳ kịch bản bắt đầu.

Bạn sẽ thấy S30killprocshoặc S00killallhoặc một cái gì đó như thế tùy thuộc vào bản phân phối của bạn. Điều này xuất hiện sau khi tất cả các tập lệnh kill được gọi để cố gắng lần lượt dừng từng dịch vụ một cách duyên dáng. Nó sẽ thử kill -15đầu tiên, tiếp theo là kill -9.

Câu trả lời ngắn gọn: shutdown -h nowhoặc shutdown -r nowduyên dáng. haltrebootđược sử dụng là không duyên dáng, nhưng họ sẽ chỉ gọi shutdowncho bạn trừ khi bạn sử dụng -ftùy chọn.


12

Không, đó là không đúng sự thật. shutdownthay đổi mức init sau đó chạy tất cả các tập lệnh tắt máy. Những kịch bản này làm gì phụ thuộc vào kịch bản. Nhưng họ thường không chấm dứt các quá trình mà gửi tín hiệu kết thúc.

Vì vậy, đây là đoạn trích thủ công cho shutdown:

   shutdown  brings  the system down in a secure way.  All logged-in users
   are notified that the system is going down, and  login(1)  is  blocked.
   It is possible to shut the system down immediately or after a specified
   delay.  All processes are first notified that the system is going  down
   by the signal SIGTERM.  This gives programs like vi(1) the time to save
   the file being edited, mail and news processing programs  a  chance  to
   exit  cleanly,  etc.   shutdown  does  its  job  by signalling the init
   process, asking it to change the runlevel.  Runlevel 0 is used to  halt
   the  system, runlevel 6 is used to reboot the system, and runlevel 1 is
   used to put to system into a state where administrative  tasks  can  be
   performed; this is the default if neither the -h or -r flag is given to
   shutdown.  To see which actions are taken on halt  or  reboot  see  the
   appropriate entries for these runlevels in the file /etc/inittab.

1
Chà, trên hầu hết nếu không phải tất cả các bản phân phối tôi đã sử dụng, điều cuối cùng mà tập lệnh RC runlevel 6 (khởi động lại) thực hiện là chạy một killall toàn cầu, để nắm bắt bất kỳ quy trình kéo dài hoặc treo nào. Nhưng điều này được chạy sau khi tất cả các tập lệnh dừng bình thường đã hoàn thành.
thích nghi

2
@adaptr Chắc chắn rồi. Nhưng các quá trình đã có cơ hội kết thúc duyên dáng. Nếu họ không có khả năng nào khác ngoài việc giết họ.
mailq
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.