Я слышал, что «shutdown -h now» не является изящной командой завершения работы, потому что она делает что-то вроде «kill -9» для всех процессов, в отличие от «kill -15».
Верно ли это, и если да, то каков более изящный способ выключения, чтобы все успело очиститься после себя?
P.s. В основном используется CentOS, Ubuntu и Debian.
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
вариант.
Нет, это не правда. 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.