我修改了负责以分配的延迟发送终止信号/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
看看它是否已完全关闭。