Я изменил скрипт, отвечающий за отправку сигнала уничтожения с выделенной задержкой, /etc/init.d/sendsigs, и сократил время, необходимое для уничтожения оставшихся процессов в 2 итерации. Работоспособен он или нет, он выполняет работу в моей системе и больше не зависает при выключении и перезагрузке.
Ниже приведена часть файла /etc/init.d/sendsigs с модификацией, обозначенной # <---:
# Kill all processes.
log_action_begin_msg "Asking all remaining processes to terminate"
killall5 -15 $OMITPIDS # SIGTERM
log_action_end_msg 0
alldead=""
OMITPIDS0="$OMITPIDS"
#for seq in 1 2 3 4 5 6 7 8 9 10; do # this is the original line
for seq in 1 2; do # <--- the above line is replaced by this one.
затем в нижней части сценария:
# Upstart has a method to set a kill timeout and so the job author
# may want us to wait longer than 10 seconds (as in the case of
# mysql). (LP: #688541)
#
# We will wait up to 300 seconds for any jobs in stop/killed state.
# Any kill timeout higher than that will be overridden by the need
# to shutdown. NOTE the re-use of seq from above, since we already
# waited up to 10 seconds for them.
while [ -n "$(upstart_killed_jobs)" ] ; do
seq=$(($seq+1))
#if [ $seq -ge 300 ] ; then # this is the original line
if [ $seq -ge 2 ] ; then # <--- I can't wait for another 300 iteration
break
fi
ПРИМЕЧАНИЕ. Это может быть не лучшим решением, поскольку оригинальный сценарий работает на других системах, для тех систем, как моя, где не предлагалось несколько предложенных решений - это то, чем я могу поделиться, учитывая, что я использую систему только как рабочую станцию без критические службы работают после закрытия всех приложений для настольных компьютеров, которые я использую до нажатия на значок выключения или перезапуска.
Используемая система - ноутбук Asus X550DP.
sudo shutdown -h now
и посмотреть, выключится ли он полностью.