ความแตกต่างระหว่างคำสั่ง Halt และ Shutdown คืออะไร?


คำตอบ:


77

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

ดังนั้นต้องใช้คำสั่ง shutdown เช่นนี้เพื่อหยุด / ปิดคอมพิวเตอร์ทันที (บน Linux และ FreeBSD อย่างน้อย):

shutdown -h now

หรือรีบูตเครื่องด้วยการเตือนล่วงหน้า 30 นาทีตามกำหนดเอง:

shutdown -r +30 "Planned software upgrades"

หลังจากการหน่วงเวลาshutdownบอกinitให้เปลี่ยนเป็น runlevel 0 (halt) หรือ 6 (reboot) (โปรดทราบว่าการละเว้น-hหรือ-rจะทำให้ระบบเข้าสู่โหมดผู้ใช้คนเดียว (runlevel 1) ซึ่งฆ่ากระบวนการของระบบส่วนใหญ่ แต่ไม่ได้หยุดระบบจริง ๆ แต่ก็ยังช่วยให้ผู้ดูแลระบบยังคงเข้าสู่ระบบในฐานะ root)

เมื่อกระบวนการของระบบถูกฆ่าและระบบไฟล์ถูกถอนการติดตั้งระบบจะหยุดทำงาน / ปิดเครื่องหรือบูตใหม่โดยอัตโนมัติ สิ่งนี้ทำโดยใช้คำสั่งhaltorrebootซึ่งซิงค์การเปลี่ยนแปลงดิสก์แล้วทำการหยุด / ปิดเครื่องจริงหรือรีบูต

บน Linux หากhaltหรือrebootทำงานเมื่อระบบยังไม่ได้เริ่มกระบวนการปิดระบบจะเรียกใช้shutdownคำสั่งโดยอัตโนมัติแทนที่จะดำเนินการตามที่ตั้งใจไว้โดยตรง อย่างไรก็ตามในระบบเช่น FreeBSDคำสั่งเหล่านี้ครั้งแรกที่เข้าสู่ระบบการดำเนินการในwtmpแล้วจะทันทีดำเนินการหยุด / รีบูตตัวเองโดยไม่ต้องฆ่ากระบวนการหรือ unmounting filesystems


คำอธิบายที่ดี!

18
… แต่ตอนนี้ล้าสมัยแล้ว บนระบบปฏิบัติการ systemd Linux คำสั่งเหล่านี้มีอยู่ (ในคำของ systemd doco) "เพื่อความเข้ากันได้เท่านั้น" นอกจากนี้ได้แยกhalt, rebootและshutdownโปรแกรมที่เรียกอีกคนหนึ่ง มีโปรแกรมเดียวหนึ่งโปรแกรมที่มีตัวแยกบรรทัดคำสั่งจำนวนมากที่ช่องทางเข้าสู่เส้นทางรหัสเดียวภายใน ไม่ได้มีระดับการทำงาน การปิดเครื่องไม่เข้าสู่โหมดผู้ใช้คนเดียว อันที่จริงโหมดผู้ใช้คนเดียวได้ถูกเปลี่ยนชื่อแล้ว ดูรายละเอียดunix.stackexchange.com/a/196014/5132
JdeBP

49

ที่ผ่านมา

ในช่วงปี 1980, BSDs มีhalt, และreboot shutdownระบบ 5 UNIX มีชุดเครื่องมือความเข้ากันได้ BSD แต่โดยกำเนิดแล้วมันมีshutdownคำสั่งต่างกัน และไม่มีhaltหรือrebootเลย (บางรุ่นในระบบ 5 มีสิ่งต่าง ๆ เช่น SCO XENIX haltsys)

BSD haltและrebootคำสั่งอยู่ในระดับต่ำรุนแรงและทันที นึกถึงวิธีที่จะปิดระบบ BSD เป็นshutdownคำสั่งซึ่งทำทุกสิ่งที่หนึ่งที่คาดว่าจะเกิดขึ้น: wallข้อความไปยังผู้ใช้บริการที่ถูกฆ่าตายอย่างสง่างาม, รายการบันทึกเป็นลายลักษณ์อักษรการเข้าสู่ระบบปิดการใช้งานและอื่น ๆ

ในขณะที่ BSD นั้นส่วนใหญ่เป็นที่ซึ่งภูมิปัญญาที่ได้รับนั้นเกิดขึ้นว่า " shutdownexecs halt/ reboot" และอย่างหลังนั้นจะต้องใช้ด้วยความระมัดระวัง มันเป็นระบบ 5 ในโลกที่ผู้คนได้เรียนรู้นิสัยตรงกันข้ามว่าhalt/ rebootมี shorthands เพียงที่มีประโยชน์และไม่มีอะไรเพิ่มเติม: /usr/ucb/haltจาก "แพคเกจความเข้ากันได้ BSD" shutdown -hก็ไม่แตกต่างกันในผลกระทบต่อ init 0พวกเขาทั้งสองสิ้นสุดการทำ

อ่านเพิ่มเติม

ในวันนี้

ทุกวันนี้เรามีชุดเครื่องมือการจัดการระบบที่เป็นไปได้มากมาย BSD ยังคงมีชุดเครื่องมือของพวกเขาแม้ว่าจะถูกกำจัดจาก AT & Tisms ที่เป็นไปได้ใด ๆ ในปี 1990 Miquel van Smoorenburg ในปี 1992 (อีกครั้ง) เขียน Linux init+ rcและเครื่องมือที่เกี่ยวข้องซึ่งตอนนี้ผู้คนเรียกว่า "System 5 init" แม้ว่ามันจะไม่ใช่ซอฟต์แวร์จาก UNIX System 5 (และไม่ใช่แค่init) นอกจากนี้ยังมีsystemd , พุ่งพรวดและNoshแต่ละที่มีการใช้งานของตัวเองของhalt, reboot, fasthalt, fastbootและอื่น ๆ

ชุดเครื่องมือได้เติบโตขึ้นและเปลี่ยนแปลงไปเช่นกัน ขณะนี้มีpoweroffคำสั่งซึ่งไม่ได้มีอยู่ในระบบปฏิบัติการยุค 1980 เนื่องจากหน่วยประมวลผลกลางในเครื่องที่ทันสมัยส่วนใหญ่ไม่มีวิธีควบคุมอุปกรณ์ไฟฟ้า ชุดเครื่องมือ Linux โดยเฉพาะได้รับคำสั่ง BSD; แต่เช่นเดียวกับเครื่องมือความเข้ากันได้ BSD ใน UNIX System 5 พวกเขาไม่ได้ทำงานจริงและสิ่งต่าง ๆ ได้รับการแบนส่วนใหญ่

แฟบนี้ได้นำเราไปยังจุดที่haltและshutdownเป็นส่วนใหญ่เหมือนกัน แต่รายละเอียดที่แน่นอนแตกต่างจากชุดเครื่องมือไปยังชุดเครื่องมือและกลไกของชุดเครื่องมือแต่ละชุดนั้นแตกต่างกันเล็กน้อย

นอกจากนี้ยังได้นำเราไปยังตำแหน่งที่น่าอายเล็กน้อยที่ชุดคำสั่งนี้ได้กลายเป็นประดับเพื่อให้มีตัวเลือกความเข้ากันได้ว่าตอนนี้จะช่วยให้คนที่จะให้คอมพิวเตอร์คำแนะนำตัวเองขัดแย้งเหมือนreboot --haltและpoweroff --rebootที่ผมระบุไว้ในหน้าคู่มือสำหรับ Nosh halt, fasthalt, reboot, fastboot, และpoweroffคำสั่ง ☺

ชุดเครื่องมือ systemd

halt, reboot, poweroff, telinitและshutdownมีทุกโปรแกรมหนึ่ง จริงๆแล้วมันเป็นsystemctlโปรแกรมของ systemd มันมีตัวแยกวิเคราะห์บรรทัดคำสั่งหลายคำสั่งสำหรับไวยากรณ์บรรทัดคำสั่งต่าง ๆ ของคำสั่งเหล่านั้นรวมถึงตัวของมันเอง แต่หลังจากนั้นช่องทางส่วนใหญ่จะกลายเป็นเส้นทางรหัสหนึ่งภายใน ไม่มีความแตกต่างระหว่างการใช้haltและตัวเลือกคำสั่งเพื่อเรียกใช้การกระทำและการใช้shutdownและตัวเลือกคำสั่งเพื่อเรียกใช้การกระทำเดียวกัน

systemd ไม่พิจารณาโหมดช่วยเหลือ (ซึ่งเป็นสิ่งที่คน systemd เปลี่ยนชื่อผู้ใช้โหมดเดียว ) เป็นสถานะระบบปิดและไม่สามารถเข้าถึงได้ด้วยคำสั่งใด ๆ เหล่านี้ ตัวเลือกน้อยเป็นเช่นเดียวกับshutdown nowpoweroff

อ่านเพิ่มเติม:

  • https://unix.stackexchange.com/a/196014/5132

BSDs

BSD ส่วนใหญ่เก็บความหมายของยุค 80 haltและshutdownดังนั้นจึงไม่เหมือนกันมากในชุดเครื่องมือของพวกเขา haltและrebootเป็นหนึ่งโปรแกรมเดียว; และยังคงอยู่ในระดับต่ำทันทีและรุนแรง ในขณะที่shutdownและpoweroffหนึ่งโปรแกรมเดียวทำสิ่งที่นึกถึงทั้งหมดเช่นการปิดระบบตามกำหนดเวลาการเขียนwallข้อความการกระทำการบันทึกการปิดใช้งานการเข้าสู่ระบบและอื่น ๆ

ในชุดเครื่องมือ BSD shutdown/ poweroffสิ้นสุดการเรียกใช้halt/ rebootเพื่อแสดงการเปลี่ยนแปลงสถานะของระบบขั้นสุดท้าย (มักจะไม่ถูกต้องในปัจจุบัน) ได้รับภูมิปัญญาที่ " shutdownexecs halt/ reboot" ในความเป็นจริงยังคงถือใน NetBSD และ OpenBSD แต่ใน FreeBSD / TrueOS / DragonFlyBSD มันเป็นกรณีเฉพาะถ้าใช้-oตัวเลือก เมื่อวันที่ BSDs เหล่านี้ทั้งในโปรแกรมเหล่านี้ได้ตามปกติตราการเปลี่ยนแปลงสถานะของระบบขั้นสุดท้ายด้วยการส่งสัญญาณต่างๆ ( INT, USR1และUSR2) ในการประมวลผลที่ # 1 initทำการจัดการสถานะระบบทั้งหมดบนระบบเหล่านี้

ทั้งหมดของพวกเขาตัวเลือกน้อยshutdown nowจะไม่เทียบเท่ากับการใด ๆhalt, หรือreboot poweroffมันเปลี่ยนเป็นโหมดผู้ใช้คนเดียว BSD ซึ่งหนึ่งสามารถเปลี่ยนกลับไปเป็นโหมดผู้ใช้หลายคน

อ่านเพิ่มเติม:

  • shutdown. คู่มือการใช้งานระบบการจัดการของ หน้าคู่มือ NetBSD 2011/11/04
  • reboot,halt . หน้าคู่มือ OpenBSD 2016/09/03
  • shutdown. หน้าคู่มือ FreeBSD 2016/09/21
  • reboot, halt,fastbootfasthalt , หน้าคู่มือ FreeBSD 2017/03/19
  • shutdown. คู่มือการใช้งานระบบการจัดการของ หน้าคู่มือ DragonFlyBSD 2016/09/29
  • reboot, halt,fastbootfasthalt , คู่มือการใช้งานระบบการจัดการของ หน้าคู่มือ DragonFlyBSD 2016/09/29

ชุดเครื่องมือ nosh

ในชุดเครื่องมือ Nosh จัดการระบบhalt, fasthalt, poweroff, fastpoweroff, rebootและfastbootมีทั้งหมดโปรแกรมหนึ่ง มันเป็นความเข้ากันได้แบบย้อนหลังที่โดยปกติจะเชื่อมโยงกับshutdownสิ่งที่ตรงกันข้ามกับภูมิปัญญาที่ได้รับ --forceตัวเลือกที่จะทำให้ห่วงโซ่การsystem-controlแทน

ดังนั้นจึงมีไม่แตกต่างกัน (ขาด--force) ระหว่างhaltคำสั่งและshutdownคำสั่ง (มีตัวเลือกที่เทียบเท่า) ในชุดนี้เป็นชุดของ "BSD / 5 ระบบการทำงานร่วมกัน" คำสั่งนี้เป็นเพียงชั้น shim shutdownบางกว่าด้านบนของ

อ่านเพิ่มเติม:

ชุดเครื่องมือพุ่งพรวด

เช่นเดียวกับ nosh ในชุดเครื่องมือจัดการระบบพุ่งพรวดตรงกันข้ามกับภูมิปัญญา BSD ที่ได้รับจะถูกนำไปใช้ halt,, rebootและpoweroffเป็นหนึ่งโปรแกรมทั้งหมดที่เชื่อมโยงกับshutdown; ยกเว้นว่าใช้--forceตัวเลือกซึ่งทำให้reboot()ระบบเรียกใช้ตัวเอง

ดังนั้นอีกครั้งไม่มีความแตกต่าง (ขาด--force) ระหว่างhaltคำสั่งและshutdownคำสั่ง (พร้อมตัวเลือกเทียบเท่า) ในชุดเครื่องมือนี้ นอกจากนี้ยังมีอีกตัวเลือกน้อยshutdown now(ซึ่งไม่มีใครhalt, rebootหรือpoweroffสามารถท้ายกล่าวอ้างเช่นที่พวกเขาทั้งหมดตั้งค่าตัวเลือก) นำระบบเข้าสู่โหมดผู้เดียวมากกว่าปิดมันลง

อ่านเพิ่มเติม:

ชุดเครื่องมือLinux System 5 init+rc

อีกครั้งในชุดนี้ตรงข้ามของภูมิปัญญา BSD ได้รับใช้และhaltและrebootก็ห่วงโซ่shutdown- ถ้าระบบที่มีอยู่แล้วใน poweroff หรือหยุด "ทำงานระดับ" ซึ่งในกรณีนี้คำสั่งเหล่านี้จริงออกพระราชกำหนดการเปลี่ยนแปลงสถานะของระบบขั้นสุดท้าย โซ่หันไปshutdowninit

ดังนั้นอีกครั้งไม่มีความแตกต่าง (ยกเว้นว่าระบบได้ปิดตัวลงส่วนใหญ่แล้ว ) ระหว่างhaltและshutdownเพราะในอดีตเพียงแค่เรียกหลัง และใช่อีกตัวเลือกน้อยshutdown now(ซึ่งไม่มีใครhalt, rebootหรือpoweroffสามารถท้ายกล่าวอ้างเช่นที่พวกเขาทั้งหมดตั้งค่าตัวเลือก) นำระบบเข้าสู่โหมดผู้เดียวมากกว่าปิดมันลง


นี่คือเหตุผลที่ระบบการลงคะแนนไม่ทำงานเมื่อ 80% ของผู้ลงคะแนน
ychaouche

คุณบอกว่า: "หยุดและรีบูตเป็นโปรแกรมเดียวและยังคงอยู่ในระดับต่ำทันทีและรุนแรง" ซึ่งดูเหมือนจะไม่เป็นเช่นนั้น ฉันกำลังอ้างถึงหน้า halt man จาก dragonflyBSD ซึ่งกล่าวว่า: ยูทิลิตี halt และ reboot จะล้างแคชของระบบไฟล์ไปยังดิสก์ส่งกระบวนการที่กำลังทำงานทั้งหมด SIGTERM (และต่อมา SIGKILL) และตามลำดับหยุดหรือรีสตาร์ทระบบ แอ็คชันถูกบันทึกรวมถึงการป้อนเร็กคอร์ดการปิดในไฟล์ wtmp (5) ดู: dragonflybsd.org/cgi/web-man?command=halt§ion=ANY
ychaouche

ตอนนี้ไปและอ่านคำตอบอีกครั้งสำหรับอยู่แล้วได้รับอย่างชัดเจน (สองครั้ง) ตั้งค่าของสิ่งที่ไม่อยู่ในรายการที่มิ หนึ่งที่สะกดออกมาในคู่มือผู้ดูแลระบบของ BSD ต่างๆ
JdeBP

รายการอะไร @JdeBP
ychaouche

11

ฉันสงสัยว่าสิ่งนี้ขึ้นอยู่กับรุ่นของ UNIX / Linux ที่คุณใช้งานอยู่ บน Centos (และฉัน expec Linux อื่น ๆ ที่ทันสมัย) หยุดการโทร (ถ้าคุณไม่ได้อยู่ที่runlevel 0 หรือ 6) ดังนั้นระบบของคุณจะถูกปิดอย่างสมบูรณ์ บน Solaris 10 หยุดโหดร้ายมากขึ้นก็เพียงแค่วูบวาบแคชดิสก์และอำนาจนอกระบบ - ไม่พยายามที่จะทำเพื่อเรียกใช้สคริปต์หรือปิดSMFสิ่งอำนวยความสะดวก


2

สำหรับผู้ที่ใช้ AWS EC2: บน AWS shutdown หยุดอินสแตนซ์เมื่อhalt ยกเลิกมัน


ความแตกต่างระหว่างหยุดและสิ้นสุดคืออะไร
roaima

นั่นเป็นหัวข้อที่แตกต่างอย่างสิ้นเชิงเมื่ออยู่ที่นี่นั่นเป็นเหตุผลที่ฉันไม่ได้พูดถึง แต่คุณสามารถดูได้ที่docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
dveim

1
ดังนั้นในคำตอบของคุณคุณกำลังบอกว่าหยุดทำสิ่งที่พูดและหยุดอินสแตนซ์ในขณะที่หยุด (หรือในคำศัพท์ทางเลือกของคุณสิ้นสุด ) หยุดอินสแตนซ์และลบมัน
roaima

ใช่. แต่นั่นก็เฉพาะ AWS
dveim

อา ฉันเห็น. OP ไม่ได้ระบุบริบท คุณมี. ขอบคุณ
roaima

0

ใน linux "halt" และ "reboot" เป็นนามแฝงของคำสั่ง shutdown - shutdown -hและshutdown -rตามลำดับ การปิด Bareword โดยทั่วไปจะถือว่า -h


10
พวกเขาไม่ได้aliasesอยู่ในความรู้สึกของนามแฝงเปลือก แต่ใช่haltพื้นเพียงเรียกร้องshutdown -hและวิ่งreboot shutdown -rโปรดทราบว่าถ้าคุณผ่าน-f(แรง) ตัวเลือกhaltหรือreboot, shutdownจะไม่เรียกว่า
Mikel

ที่จริงแล้วถึงแม้ว่ามันจะยังคงไม่ถูกต้องในระบบปฏิบัติการ systemd คำอธิบายของ Shadur ที่นี่นั้นใกล้เคียงกับความจริงมากกว่าการแก้ไขของ Mikel คือ ไม่มี "A เพิ่งโทร B" พวกเขามีทางเลือกทั้งหมดของการเรียกใช้โปรแกรมหนึ่งเดียวตามที่อธิบายในรายละเอียดเพิ่มเติมได้ที่unix.stackexchange.com/a/196014/5132
JdeBP

@JdeBP ย้อนกลับไปเมื่อฉันเขียน systemd นี้ออกมาไม่ถึงปีและฉันไม่เคยได้ยินเลย :)
Shadur

1
@JdeBP ฉันต้องการให้พวกเขาพูดsendmailคำสั่ง ณ จุดนี้ - เช่นเดียวกับ MTA มันไม่สำคัญว่าระบบ init ใดที่คุณใช้เพราะพวกเขาทั้งหมดจะรับรู้ทั้งสองshutdownและhaltเป็นเช่นนั้น
Shadur

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