Изящное завершение работы Linux


17

Я слышал, что «shutdown -h now» не является изящной командой shutdown, потому что она выполняет что-то вроде «kill -9» для всех процессов, а не «kill -15».

Правда ли это, и если да, то каков более изящный способ выключения, чтобы все успело почистить себя?

Ps Использование CentOS, Ubuntu и Debian в основном.


Я подожду, пока кто-нибудь еще вмешается, но это звучит неправильно. -h просто говорит перевести систему в режим HALT вместо перезагрузки. А «сейчас» означает, что у пользователей нет льготного периода для отключения. Не уверен, как что-либо из этого изменит фактическое поведение при выключении
Джеффри Смит

4
Пожалуйста, прочитайте страницу руководства для выключения ( man shutdown). Это объясняет это полностью.
Эндрю Шульман

Ответы:


15

shutdown -h nowпозвоню /etc/rc.d/rcили /etc/init.d/rc. rcСкрипт будет вызывать уничтожения сценарии для нового уровня выполнения (0 для -h, 6 для -r), а затем с помощью любых стартовых скриптов.

Вы увидите S30killprocsили S00killallили что - то подобное , что в зависимости от вашего дистрибутива. Это происходит после того, как все сценарии уничтожения были вызваны, чтобы попытаться корректно остановить каждую службу по очереди. kill -15Сначала попробую , а потом kill -9.

Краткий ответ: shutdown -h nowили shutdown -r nowизящны. haltи rebootбыл некрасивым, но они просто будут звать shutdownвас, если вы не воспользуетесь этой -fопцией.


12

Нет, это не правда. shutdownизменяет уровень инициализации, который затем запускает все сценарии завершения работы. Что эти сценарии делают, зависит от сценария. Но они обычно не завершают процессы, а посылают им сигнал об окончании.

Так что это отрывок из руководства для 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
Ну, на большинстве, если не на всех дистрибутивах, которые я использовал, последнее, что делает rc-скрипт уровня запуска 6 (reboot), - это запуск глобального killall, чтобы перехватить любые затянувшиеся или зависшие процессы. Но это выполняется после того, как все нормальные сценарии остановки завершены.
Адаптер

2
@adaptr Конечно. Но у процессов был шанс изящно закончиться. Если они этого не сделали, нет другой возможности, кроме как убить их.
mailq
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.