Linux ปิดอย่างงดงาม


17

ฉันเคยได้ยินว่า "shutdown -h now" ไม่ใช่คำสั่ง shut down ที่สง่างามเพราะมันคล้ายกับ "kill -9" สำหรับกระบวนการทั้งหมดซึ่งต่างจาก "kill -15"

นี่เป็นเรื่องจริงหรือไม่และถ้าเป็นเช่นนั้นจะมีวิธีใดที่จะปิดตัวเองได้อย่างงดงามยิ่งขึ้นเพื่อให้แน่ใจว่าทุกอย่างมีเวลาในการล้างตัวเอง?

ปล. ใช้ CentOS, Ubuntu และ Debian เป็นหลัก


ฉันจะรอให้คนอื่นเข้ามา แต่นั่นก็ไม่ฟังดูเลย -h เพิ่งบอกให้วางระบบเข้าสู่โหมด HALT ซึ่งต่างจากการรีบูท และ "ตอนนี้" หมายความว่าไม่มีระยะเวลาผ่อนผันสำหรับผู้ใช้ในการปิดเครื่อง ไม่แน่ใจว่าสิ่งเหล่านี้จะแก้ไขพฤติกรรมการฆ่าที่แท้จริงของการปิดระบบอย่างไร
Jeffery Smith

4
โปรดอ่านหน้าคู่มือสำหรับการปิด ( man shutdown) มันอธิบายเรื่องนี้อย่างสมบูรณ์
Andrew Schulman

คำตอบ:


15

shutdown -h nowจะเรียกหรือ/etc/rc.d/rc สคริปต์จะเรียกสคริปต์ฆ่าสำหรับ runlevel ใหม่ (0 , 6 ) ตามด้วยสคริปต์เริ่มต้นใด ๆ/etc/init.d/rcrc-h-r

คุณจะเห็นS30killprocsหรือS00killallอะไรทำนองนั้นขึ้นอยู่กับ distro สิ่งนี้เกิดขึ้นหลังจากสคริปต์การฆ่าทั้งหมดได้รับการเรียกให้พยายามหยุดบริการแต่ละอย่างอย่างสง่างาม ก็จะพยายามที่แรกตามด้วยkill -15kill -9

คำตอบสั้น ๆshutdown -h nowหรือshutdown -r nowมีความสง่างาม haltและrebootเคยเป็นคนที่ไม่สุภาพ แต่พวกเขาก็จะโทรshutdownหาคุณจนกว่าคุณจะใช้-fตัวเลือก


12

ไม่นั่นไม่เป็นความจริง shutdownเปลี่ยนระดับ init ซึ่งจะเรียกใช้สคริปต์การปิดทั้งหมด สิ่งที่สคริปต์เหล่านี้ทำขึ้นอยู่กับสคริปต์ แต่โดยปกติพวกเขาจะไม่ยุติกระบวนการ แต่ส่งสัญญาณไปยังจุดสิ้นสุด

ดังนั้นนี่เป็นข้อความที่ตัดตอนมาสำหรับ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.

1
ส่วนใหญ่ถ้าไม่ใช่ distros ทั้งหมดที่ฉันได้ใช้สิ่งสุดท้ายที่สคริปต์ rc runlevel 6 (รีบูต) ไม่ได้เรียกใช้ killall ทั่วโลกเพื่อจับกระบวนการที่เอ้อระเหยหรือแขวน แต่นี่จะทำงานหลังจากสคริปต์หยุดปกติทั้งหมดเสร็จสมบูรณ์
adaptr

2
@adaptr แน่นอน แต่กระบวนการต่าง ๆ มีโอกาสที่จะสิ้นสุดอย่างสง่างาม หากพวกเขาไม่มีความเป็นไปได้อื่นที่จะฆ่าพวกเขา
mailq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.