Tôi đã sửa đổi tập lệnh chịu trách nhiệm gửi tín hiệu kill với độ trễ được phân bổ, /etc/init.d/sendsigs và giảm thời gian cần thiết để tiêu diệt các tiến trình còn lại trong 2 lần lặp. Khỏe mạnh hay không nó sẽ hoàn thành công việc trên hệ thống của tôi và không còn bị treo khi tắt máy và khởi động lại.
Dưới đây là một phần của /etc/init.d/sendsigs với sửa đổi được chỉ định bởi # <---:
# 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.
sau đó ở phần dưới của tập lệnh:
# 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
LƯU Ý: Đây có thể không phải là giải pháp tốt nhất vì tập lệnh gốc đang hoạt động trên các hệ thống khác, đối với các hệ thống như của tôi, nơi một số giải pháp được đề xuất không áp dụng - đây là điều tôi có thể chia sẻ khi tôi chỉ chạy hệ thống như một máy trạm không có các dịch vụ quan trọng chạy sau khi đóng tất cả các ứng dụng máy tính để bàn tôi sử dụng trước khi nhấp vào biểu tượng tắt máy hoặc khởi động lại.
Hệ thống đang sử dụng là máy tính xách tay Asus X550DP.
sudo shutdown -h now
và xem nếu nó tắt hoàn toàn.