วิธีปิดคอมพิวเตอร์ในทันที (1 ถึง 5 วินาที) โดยไม่ใช้สวิตช์ / ซ็อกเก็ตทางกายภาพ


17

มีคำสั่ง / โปรแกรมใดบ้างที่ฉันสามารถปิดระบบได้ทันที (1 ถึง 5 วินาที)?

Update (2015):ขอบคุณผู้ที่แนะนำให้ปิดโดยใช้ปลั๊กไฟ : D

Update (2016): @technophile แนะนำว่าฉันควรเพิ่มข้อมูลบางอย่างลงในคำถามที่อธิบายลักษณะของปัญหา - ส่วนใหญ่ฉันพยายามแก้ไขสถานการณ์ใด นี่คือสถานการณ์ที่คำถามนี้ถูกถามเมื่อหลายปีก่อน

เรากำลังสร้างระบบที่จะใช้งานในพื้นที่สาธารณะเช่น (สนามบินโรงแรม ฯลฯ ) ผู้คนสามารถใช้ระบบนั้นเพื่อท่องอินเทอร์เน็ตตรวจสอบอีเมลหรือจอง ฯลฯ โดยใช้บัตรเครดิต ระบบถูกสร้างขึ้นเพื่อให้แน่ใจว่าผู้ใช้รายที่สองไม่สามารถรับข้อมูล (อีเมลบัตรเครดิต) ของผู้ใช้คนก่อนหน้าของระบบนั้นได้แม้ว่าจะมีการติดตั้งซอฟต์แวร์ประเภทคีย์ล็อกเกอร์ก็ตาม ระบบแน่ใจได้อย่างไร? ไม่สามารถแชร์รายละเอียดได้เนื่องจากไม่ใช่ข้อมูลสาธารณะ แต่เราพัฒนาวิธีที่จะมีระบบปฏิบัติการใหม่อยู่เสมอ (ราวกับเพิ่งติดตั้งใหม่) สำหรับผู้ใช้ใหม่ของระบบ ปัญหาเดียวคือเราต้องปิดเครื่องและนำขึ้นมาอีกครั้งทันทีที่ผู้ใช้คนแรกออกจากเครื่อง

และฉันต้องการให้การปิดระบบเป็นไปอย่างรวดเร็วในทันที (- นั่นคือสาเหตุที่ทำให้เกิดคำถาม) และการบูตครั้งถัดไปนั้นรวดเร็วมากเช่นกันซึ่งฉันค้นคว้าและทดลองการกระจาย Linux จำนวนมากจาก Damn Small Linux ไปจนถึง Slackware ไป Debian เป็นต้น แยกเรื่อง


1
เนื่องจากโค้ดที่เร็วที่สุดคือโค้ดที่ไม่ทำงานฉันจึงบอกว่าวิธีที่เร็วที่สุดในการปิดระบบคือไม่เปิดใช้งาน อธิบายสิ่งที่คุณพยายามทำถ้าคุณต้องการคำตอบเฉพาะ
Dmitry Grigoryev

2
@ Sam152 ผนังไหน?
Choc

คุณต้องการระบุด้วย "โดยไม่ทำให้ระบบของฉันเสียหาย" หรือไม่เป็นปัญหาหรือไม่
Technophile

@Technophile ไม่ใช่ความเสียหายถาวรกับระบบของฉันแน่นอน แต่คุณมีอะไรในใจ
choc

จุดประสงค์ของฉันคือการชี้แจงสิ่งที่คุณถามและสิ่งที่คุณพยายามทำ ฉันทำงานด้านอิเล็กทรอนิกส์ "ทันที" หมายถึง 1 วินาที 1 มิลลิวินาที? 1US? 1ns? คุณเป็นคนใจร้อนหรือว่ามีความต้องการเฉพาะบางอย่าง? ผลของเวลาปิดเครื่อง (ตัวอย่าง) 6 วินาทีคืออะไร? ฉันทำงานกับระบบสมองกลฝังตัวซึ่งทำให้การ์ด SD เสียหายหากการปิดเครื่องเกิน 5 วินาทีเมื่อกดปุ่มเปิดปิดค้างไว้ คุณกำลังทำอะไร?
Technophile

คำตอบ:


32
sudo shutdown -h now

9
ที่จะไม่ปิดระบบทันที ;)
Marcel Korpel

14
@Marcel Korpel: ในฐานะที่เป็นหนึ่งในทันทีควรทำโดยไม่ทำลายระบบของเขา;)
เฟลิกซ์

@ Felix - ฉันได้ยินอยู่เสมอว่า Linux เป็นระบบที่มีประสิทธิภาพมากและไม่สามารถจัดการกับ "การเริ่มระบบใหม่" แบบเดียวกับที่ Windows ใช้งานได้ จะน่าแปลกใจ;)
Gnoupi

2
@Gnoupi: ไม่สามารถสร้างระบบปฏิบัติการได้โดยไม่มีช่องโหว่เพื่อปิดระบบทันที มิฉะนั้นคำตอบสำหรับวิธีการปิดเครื่องที่เร็วที่สุดคือการดึงสายไฟ
harrymc

1
ไวยากรณ์บางเวอร์ชันแตกต่างกัน "ปิดระบบ sudo -g0 -y -i5" (Solaris) และแน่นอนที่จะทำให้มันยากค่าที่แน่นอนตาม "i" อาจแตกต่างกันสำหรับการปิดระบบต่าง ๆ ฉันเชื่อว่ามันเป็น 0 ในระบบอื่น ๆ มากมายสำหรับการปิดระบบ ถอนหายใจ ต้องรักมาตรฐานมากมายให้เลือก!
Brian Knoblauch

14

ฉันไม่แนะนำให้ทำสิ่งต่อไปนี้หากคุณไม่ได้ถูกบังคับด้วยเหตุผลพิเศษจริง ๆ :

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

มันหยาบโหดร้ายและถือได้ว่า เทียบเท่ากับการถอดปลั๊กสายไฟ ...

วิธีที่ถูกต้องคือshutdown -h nowมีsudoก่อนเมื่อมีความจำเป็น
บางทีฉันควรบอกว่าวิธีที่ถูกต้องตามกฎหมาย ; ดูด้านล่างหรือดีกว่าtl; dr


บางคำเพิ่มเติมหรือที่รู้จักกันในเรื่องตอนที่ 1
ในตอนแรกคือผู้ประทับจิตและมันจะเป็นจนถึงที่สุด

ทั้งลินุกซ์ขึ้นจากการดูแลความรักของinit [ 1 ] [ 2 ] อย่างไรก็ตามและไม่ได้โดยไม่มีจำนวนหนึ่งของมักขะมีเวลาอยู่ในที่ที่ดีพระเจ้าผู้ใช้รากสามารถทรยศต่อความรักนี้และก็killinit กับเถียงไม่ได้ ( -9) การสั่งซื้อ
( หนังสือมารยาทกำหนดไว้สำหรับการนับดุ๊กและผู้ใช้ marquisesจะเรียกก่อนsudo)

จากนั้นพ่อมดบางคนก็สร้างเสน่ห์ในการปกป้องผู้ประทับจิต (จากหนังสือ man 2 init )

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

(สายลับของเรารายงาน[ U1 ]ที่ init จะจัดการ 1 HUP 6 ABRT 11 SEGV 15 ระยะ 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
ดังนั้นผู้ใช้รูทลอร์ดที่ดีจะ เรียนรู้ข่าวและเปลี่ยนคำสั่งในkill -ABRT 1หรือkill -SEGV 1ที่มักจะสร้าง ความตื่นตระหนกเคอร์เนลและการถ่ายโอนข้อมูลหลัก

มันทำงานได้เพราะinitเป็นกระบวนการแรกที่ทำงานและใช้เวลาจำนวน PID 1 [ 2b ]

สิ่งนี้ไม่ปลอดภัยไม่ฉลาดและคุณรู้สึกว่าเป็นลางบอกเหตุที่ไม่ดีและคำสาป แต่ถ้าคุณไม่สามารถจับมือและถอดปลั๊ก ...

The curse : มันจะไม่เขียนลงใน log มันจะไม่ฆ่าโพรเซสทั้งหมด & รอการสิ้นสุดมันจะไม่เขียนบน HDD อย่างถูกต้องอัพเดต inodes ไม่ว่าจะ unmount ระบบไฟล์หรือไม่ อย่าคิดเลยว่ามันจะช่วยประหยัดตัวเลือกของหน้าต่างกราฟิกและประวัติเชลล์และอื่น ๆ อีกมากมายนอกเหนือจากจินตนาการของเรา ... เนื่องจากเรากล่าวว่าการถอดปลั๊กสายไฟหรือแบตเตอรี่ถ้าเป็นแล็ปท็อป


วิธีที่ถูกต้อง
"ไม่ใช่ขุนนาง, ขุนนาง, ไม่ใช่ขุนนาง, ผู้ได้รับการแต่งตั้ง tuo da gloriam.", คำขวัญของอัศวินนักรบ
วิธีที่ถูกต้องตามกฎหมายคือการใช้shutdown[ 3 ]

sudo shutdown -h now

การปิดระบบจัดให้มีระบบที่จะนำมาลงอย่างปลอดภัย ผู้ใช้ที่เข้าสู่ระบบทั้งหมดจะได้รับแจ้งว่าระบบกำลังจะลงและ ...

แต่-h nowพวกเขาจะไม่มีเวลามากพอที่จะทำ ...


บางคำเพิ่มเติมหรือที่รู้จักกันในเรื่องราวตอนที่ II
กาลครั้งหนึ่งมีบางขั้นตอนตรรกะที่รู้สึกได้จากท้องฟ้าเหนือคนยูนิกซ์:

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

อันที่จริงในปัจจุบันเราไม่ไว้วางใจใด ๆ เพิ่มเติมในการดำรงอยู่ของทั้งสามมอยเร[ 5 ] ของโลกลินุกซ์ , reboot, poweroffและhalt[ 6 ]ที่: วิทยาศาสตร์สมัยใหม่ของls -l $(which poweroff halt reboot)และเป็นหนึ่งในman rebootกระจายไฟใหม่ในยุคมืดนี้และเผยให้เห็นเรา มีคำสั่งจริงเพียงคำเดียวเท่านั้นที่แยกวิเคราะห์ตัวเลือกทั้งหมดเพื่อให้เรามีอิสระที่จะขอการกระทำที่ขัดแย้งกับชื่อคำสั่งของพวกเขา! ( halt -pหรือreboot -pสำหรับpoweroff,shutdown -rสำหรับreboot... )

ตอนนี้ทุกคนดูเหมือนจะมีความชัดเจนและสะดวกสบายสำหรับทุกข่าวลือเรียกร้อง[ 7 ]ว่าในนรกของชุดเครื่องมือ systemd [ 8 ]การปฏิวัติที่ได้ดำเนินการออกไม่รู้ทั้งในทางตรงข้าม ขอบคุณกองทัพด้านหลังที่เข้ากันได้กับ shimsเราไม่ได้สังเกตเลยว่ารีบูต, poweroff, หยุด[ 6 ]และแม้แต่ telinit [ 9 ]และการปิดระบบ[ 3 ]ล้วนอยู่ในขอบเขตของระบบใหม่ของกษัตริย์แล้ว[ 10 ]. โปรดฟังเรื่องราวทั้งหมดจากเสียงต้นฉบับของ JdeBP The Bard [ 9 ]เพราะฉันไม่มีลมหายใจ

ถ้าคุณเป็นสาวกของลัทธิ Ubuntu คุณอาจจะยังคงตระหนักถึงในขณะที่ของการเรียกร้องทุกคน[ 11 ]


ตรงกลางของโลกhalt -f, init, telinit, systemctl
กำลังหาวิธีการแก้ปัญหาได้เร็วกว่าหนึ่งที่ถูกต้องเช่นเดียวกัน แต่ฉลาด

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

ว่าคุณอยู่ภายใต้ systemd หรือไม่คุณควรจะสามารถหยุดคอมพิวเตอร์โดยไม่ต้องเรียกใช้ขั้นตอน shudown ที่ถูกต้องทั้งหมด (และรวดเร็วยิ่งขึ้น):

  1. halt -f: ระบุตัวเลือก-f (ทราบว่าคุณต้องการ-fที่จะหลีกเลี่ยงขั้นตอนการปิดเครื่อง) กับคำสั่งดังกล่าวด้วยหรือแม้กระทั่งกับsudo poweroff -f sudo reboot -f -hแน่นอนเราสามารถอ่านจากman reboot(และเทียบเท่า) เกี่ยวกับความจำเป็นในการระบุตัวเลือก-fเพื่อหลีกเลี่ยงการเรียกปิด:

    เมื่อเรียกว่ามี--forceหรือเมื่ออยู่ในระดับการทำงาน 0 หรือ 6 เครื่องมือนี้เรียกรีบูต (2) สายระบบตัวเอง (ที่มีข้อโต้แย้ง REBOOTCOMMAND ผ่าน) และโดยตรงเรียบระบบ

    มิฉะนั้นจะเรียกใช้เครื่องมือการปิด (8)พร้อมอาร์กิวเมนต์ที่เหมาะสมโดยไม่ต้องผ่านอาร์กิวเมนต์ REBOOTCOMMAND

    -f, - บังคับ
    ไม่เรียกใช้การปิด (8) และดำเนินการตามจริงที่คุณคาดหวังจากชื่อแทน

  2. ยิ่งกว่านั้นคุณสามารถใช้telinit [ 2b ] (หรือinitโดยตรง)

    sudo telinit 0    # or 6
    

    เพื่อบอกให้ init เปลี่ยน runlevel ... แต่ถ้าเป็นเช่นนั้นทำไมไม่ฆ่ามันโดยตรง?

  3. ภายใต้ systemd คุณสามารถใช้ตัวเลือกคู่ที่ไม่ฉลาด --force --force

    systemctl --force --force poweroff  
    

    อ่านจากคู่มือ systemctl [ 10 ]

    -f, - บังคับ
    เมื่อใช้กับเปิดใช้งานเขียนทับ symlink ที่ขัดแย้งกันใด ๆ ที่มีอยู่
    เมื่อใช้กับhalt,poweroffrebootหรือ, kexec ให้เรียกใช้งานการดำเนินการที่เลือกโดยไม่ต้องปิดเครื่องทั้งหมด อย่างไรก็ตามกระบวนการทั้งหมดจะถูกบังคับให้ใช้งานไม่ได้และระบบไฟล์ทั้งหมดจะถูกถอดออกหรือประกอบใหม่เป็นแบบอ่านอย่างเดียว นี่คือตัวเลือกที่รุนแรง แต่ค่อนข้างปลอดภัยเพื่อขอให้รีบูตทันที หาก --force ถูกระบุสองครั้งสำหรับการดำเนินการเหล่านี้จะถูกดำเนินการทันทีโดยไม่ยกเลิกกระบวนการใด ๆ หรือยกเลิกการต่อเชื่อมระบบไฟล์ใด ๆ คำเตือน: การระบุ - บังคับสองครั้งกับการดำเนินการใด ๆ เหล่านี้อาจทำให้ข้อมูลสูญหาย

ps> รับแรงบันดาลใจเกี่ยวกับการแปรเปลี่ยนจากหาง JdeBP กวี[ 7 ]


9

คุณสามารถปิดเครื่องได้ทันทีโดยไม่ต้องซิงค์ดิสก์โดยเขียน "o" ไปที่ / proc / sysrq-trigger เป็นรูท

ในฐานะที่เป็นเชลล์สคริปต์มันจะดูเหมือน

#!/bin/sh
echo o >/proc/sysrq-trigger

หากคุณมีสิทธิ์ใน / proc / sysrq-trigger คุณไม่จำเป็นต้องเปิดใช้งานผ่าน sysctl ตัวเลือกนั้นมีผลกับการกระตุ้นด้วยคีย์บอร์ดเท่านั้น

ฉันไม่แนะนำให้ทำสิ่งนี้บนเครื่องด้วยระบบไฟล์ใด ๆ ที่คุณต้องการอ่านในภายหลัง

ฉันใช้สิ่งนี้กับ Google Compute Engine เพื่อฆ่าอินสแตนซ์ templated ทันทีก่อนทำเครื่องหมายสิบนาทีเพื่อเพิ่มประสิทธิภาพด้านต้นทุนของงานคลัสเตอร์มันใช้งานได้ดี


5
นี่คือคำตอบที่ดีที่สุดสำหรับคำถามนี้ OP ชัดเจนระบุว่าเขาต้องการปิดระบบในลักษณะที่คล้ายกับว่าถอดปลั๊กออกจากแหล่งพลังงานพวกเขาไม่สนใจความเสียหายหรือ "ทำอย่างถูกต้อง" ฉันไม่เข้าใจว่าทำไมไม่มีใครสามารถเข้าใจได้
Petr

1
bแทนที่จะoรีบูท (เกี่ยวข้องตั้งแต่คำถามได้รับการอัปเดต)
Kamil Maciorowski

7

คุณได้มีการใช้คีย์เมจิก SysRqREISUBรวมกัน

ทำตามฉันอีกครั้ง: "การเลี้ยงช้างเป็นสิ่งที่น่าเบื่ออย่างที่สุด ... "


2
ไม่ REISUB จะเริ่มต้นใหม่ REISUO จะปิดตัวลง หรือเพียงแค่โอ
เบโนต์

5
poweroff

สิ่งนี้ควรใช้กับ distros ที่พบบ่อยที่สุด ไม่เหมือนกับshutdownในหลาย ๆ ระบบคุณสามารถดำเนินการนี้ในฐานะผู้ใช้ปกติ (ไม่จำเป็นต้องใช้ sudo)

แก้ไข: อ่านเพิ่มเติม:


3

นำมาจากไซต์ SE อื่น:

Alt+ SysRq+ Bเป็นการรีบูตทันทีและAlt+ SysRq+ Oเป็นการปิดระบบทันที


อ้างอิง: ที่นี่


2
ดูเหมือนว่าคุณไม่ได้รับการอ้างอิงและอ้างคำตอบของคุณจากนั้นฉันจะย้อนกลับการลงคะแนนของฉัน
Francisco Tapia

นี่คือคำตอบเดิม: askubuntu.com/a/56072
cst1992

2

กดปุ่มเปิด / ปิดค้างไว้ประมาณ 4 วินาทีมันค่อนข้างเร็ว


1
หากทำเช่นนั้นการเปิดสวิตช์ไฟจะเร็วขึ้นจริง ๆ )
Gnoupi

นั่นก็เหมือนกับวิธีการปิดระบบอื่น ๆ โดยสมมติว่าระบบปฏิบัติการจัดการพลังงาน
harrymc

1
หากคุณไม่สามารถรอสองสามวินาทีและกำลังจะฆ่ากำลังใช้ระบบไฟล์ที่ทำเจอร์นัลเช่น ext3 / ext4 ดังนั้นคุณจะไม่สูญเสียข้อมูลมากนักเนื่องจากการเขียนที่ไม่ได้เขียน
CarlF

ไม่มองหาวิธีการที่ไม่เป็นโปรแกรม / ไม่ใช่ซอฟต์แวร์ในการปิดระบบมิฉะนั้นคำแนะนำ @Gnoupi นั้นเร็วกว่า ;)
Choc

2

ในการแจกแจงลินุกซ์บางอย่างการปิดระบบมีตัวเลือก -n (ดูการปิดระบบของผู้ชาย ) การแจกแจงบางอย่าง (เช่นอูบุนตูซึ่งใช้ประโยชน์จากการพุ่งพรวดแทนที่จะเป็น sysvinit) ไม่สนับสนุนการตั้งค่าสถานะของเขาและธงนี้คือ (เท่าที่สามารถเรียนรู้จาก manpage) ได้โดยไม่มีความเสี่ยง แม้ว่าฉันจะใช้มันมานานหลายปีแล้ว (บนแล็ปท็อปของฉันฉันไม่สนใจว่า daemons ทั้งหมดจะถูกยกเลิกอย่างถูกต้อง แต่ก็แค่ต้องการทุกอย่างที่ถูกฆ่าและ diskcache ของฉันถูกล้างออก) (มันเร็วกว่าการปิดปกติและปลอดภัยกว่าการดึง plug (and friends)) คุณสามารถดูว่าสิ่งนี้แก้ปัญหาของคุณ


2

ฉันใช้สคริปต์เล็ก ๆ นี้เพื่อปิดระบบ ที่จริงแล้วมันใช้สิ่งนี้เพื่อเล่นพิเรนทร์บนเครื่อง "ต้นแบบ": "เฮ้เพื่อนเรามาดูกันว่าสิ่งที่ยอดเยี่ยม. sh ทำ!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(สคริปต์นี้เลียนแบบเช่นเดียวกับการกดปุ่มAlt+ SysRq+ u/ s/oตามที่อธิบายไว้ก่อนหน้านี้) แน่นอนว่าฉันไม่ได้ทำให้ระบบผิดปกติ (ตาราง mysql ฯลฯ อาจผิดพลาด) ดังนั้นควรใช้กับเครื่องจำลองเท่านั้น หมายเหตุ: การซิงค์อาจใช้เวลาสักครู่ ฉันเห็นว่าหากระบบมีหน่วยความจำว่างมากมาย (สำหรับแคช) และคุณคัดลอกไฟล์ไปยังไดรฟ์ปากกาการซิงค์จะใช้เวลามากกว่า แต่ฉันแนะนำให้ใช้เพื่อเล่นพิเรน

แก้ไข: ควรใช้งานsyncแทนการเขียน 'ถึง' sysrq-trigger: การเขียน 'จะไม่ปิดกั้นการเรียกใช้สคริปต์ดังนั้นหลังจากขอให้เขียนแคชลงในดิสก์เครื่องจะปิดทันที ตรงกันข้ามกับsyncคำสั่งsyncจะกลับมาหลังจากการเขียนเสร็จ ดังนั้นการดำเนินการสคริปต์จะถูกบล็อกจนกว่าการล้างแคชจะเสร็จสิ้น


1
คุณไม่ควรอยู่ก่อน 'u' อีกทั้งยังเป็นวงวน:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.