ฉันปรับเปลี่ยนสคริปต์ที่รับผิดชอบในการส่งสัญญาณการฆ่าด้วยความล่าช้าที่จัดสรร /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
และดูว่ามันปิดเต็ม