Làm cách nào để tắt máy tính ngay lập tức (1 đến 5 giây) mà không cần sử dụng công tắc / ổ cắm vật lý?


17

Có bất kỳ lệnh / chương trình nào mà tôi có thể tắt hệ thống của mình ngay lập tức (1 đến 5 giây) không?

Cập nhật (2015): Cảm ơn những người đã đề nghị tắt sử dụng ổ cắm điện. : D

Cập nhật (2016): @technophile đề xuất rằng tôi nên thêm một số thông tin vào câu hỏi mô tả bản chất của vấn đề - chủ yếu là kịch bản nào tôi đang cố gắng giải quyết. Đây là kịch bản mà câu hỏi này đã được hỏi vài năm trước.

Chúng tôi đã xây dựng một hệ thống sẽ được triển khai trong các không gian công cộng như (sân bay, khách sạn, v.v.). Mọi người có thể sử dụng hệ thống đó để lướt internet, kiểm tra email hoặc thậm chí đặt chỗ, v.v. bằng thẻ tín dụng của họ. Hệ thống được xây dựng đảm bảo rằng người dùng thứ hai không thể lấy thông tin (email, thẻ tín dụng) của người dùng trước đó của hệ thống đó ngay cả khi phần mềm loại keylogger nào đó được cài đặt. Làm thế nào là hệ thống đảm bảo về nó? Chà, chi tiết không thể chia sẻ vì đó không phải là thông tin công khai. nhưng chúng tôi đã phát triển một cách để luôn có Hệ điều hành mới (như thể nó mới được cài đặt) cho một người dùng mới của hệ thống. Vấn đề duy nhất là chúng tôi phải tắt máy và đưa nó trở lại ngay khi người dùng đầu tiên rời khỏi máy.

Và tôi muốn tắt máy ngay lập tức nhanh chóng (- đó là lý do tại sao câu hỏi) và lần khởi động tiếp theo cũng rất nhanh mà tôi đã nghiên cứu và thử số lượng lớn các bản phân phối Linux từ Damn Small Linux sang Slackware cho Debian, v.v. chuyện riêng.


1
Vì mã nhanh nhất là mã không chạy, nên tôi nói cách nhanh nhất để tắt hệ thống là không bật nguồn. Giải thích những gì bạn đang cố gắng đạt được nếu bạn cần một câu trả lời cụ thể.
Dmitry Grigoryev

2
@ Sam52 tường nào?
choc

Bạn có muốn chỉ định "mà không làm hỏng hệ thống của tôi", hoặc đó không phải là một mối quan tâm?
Technophile

Tất nhiên @Technophile không phải là một thiệt hại vĩnh viễn cho hệ thống của tôi. Nhưng bạn có ý nghĩ gì?
choc

Mục đích của tôi là làm rõ những gì bạn đang hỏi và những gì bạn đang cố gắng làm. Tôi làm việc trong ngành điện tử; "ngay lập tức" có nghĩa là 1 giây? 1ms? 1us? 1ns? Bạn chỉ đơn giản là thiếu kiên nhẫn, hoặc có một số nhu cầu cụ thể? Hậu quả của thời gian tắt máy 6 giây (ví dụ) là gì? Tôi đang làm việc với một hệ thống nhúng làm hỏng thẻ SD của nó nếu tắt máy quá 5 giây khi nhấn nút nguồn. Bạn đang làm gì đấy?
Technophile

Câu trả lời:


31
sudo shutdown -h now

9
Điều đó sẽ không tắt hệ thống ngay lập tức . ;)
Marcel Korpel

14
@Marcel Korpel: Ngay lập tức như mọi người nên làm mà không làm hỏng hệ thống của mình;)
Felix

@Felix - Tôi cứ nghe rằng Linux là một hệ thống rất mạnh và nó không thể xử lý cùng một "khởi động lại cứng" như Windows của tôi chịu đựng? Sẽ rất ngạc nhiên;)
Gnoupi

2
@Gnoupi: Không có hệ điều hành nào có thể được xây dựng mà không có lỗ hổng nào để đột ngột tắt máy. Nếu không, câu trả lời cho phương pháp tắt máy nhanh nhất sẽ là kéo dây nguồn.
harrymc

1
Một số phiên bản cú pháp là khác nhau. "sudo shutdown -g0 -y -i5" (Solaris). Và tất nhiên, chỉ để gây khó khăn, giá trị chính xác theo "i" có thể khác nhau khi tắt máy trên các hệ thống khác nhau. Tôi tin rằng nó là 0 trên rất nhiều hệ thống khác để tắt máy. Thở dài. Phải yêu tiêu chuẩn, rất nhiều để lựa chọn!
Brian Knoblauch

14

Tôi không đề nghị làm như sau nếu bạn không bị ép buộc bởi những lý do thực sự đặc biệt:

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

Nó thô ráp, tàn bạo và nó có thể được coi là tương đương với việc rút dây nguồn ...

Cách chính xácshutdown -h nowvới sudotrước khi cần thiết.
Có lẽ tôi nên nói một cách hợp pháp ; xem bên dưới hoặc tốt hơn tl; dr.


Một số từ nữa , còn gọi là Câu chuyện, Chương I
Lúc ban đầu là init và nó sẽ đến cuối cùng.

Toàn bộ Linux phụ thuộc vào sự chăm sóc yêu thương của init [ 1 ] [ 2 ] . Tuy nhiên và không phải không có một sự vô ơn nhất định, đã có lúc người dùng gốc Chúa tốt có thể phản bội tình yêu này và đột nhiên bắt đầu killvới một -9trật tự không thể thay đổi ( ).
( Sách Nghi thức quy định về số lượng, công tước và diễu hành người dùng để gọi trước a sudo).

Sau đó, một số pháp sư đã tạo ra một cơ duyên để bảo vệ init (từ Sách man 2 init)

Các tín hiệu duy nhất có thể được gửi để xử lý ID 1, quá trình init, là các tín hiệu mà init đã cài đặt rõ ràng các trình xử lý tín hiệu. Điều này được thực hiện để đảm bảo hệ thống không bị vô tình đưa xuống.

(Gián điệp của chúng tôi báo cáo [ U1 ] mà init sẽ xử lý 1 HUP 6 ABRT 11 SEGV 15 HẠN 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Vì vậy, tốt Chúa dùng root học những tin tức và thay đổi lệnh trong kill -ABRT 1hoặc kill -SEGV 1thường tạo ra một hạt nhân hoảng loạn và một bãi chứa lõi.

Nó hoạt động vì init là quá trình đầu tiên để chạy và lấy số PID 1 [ 2b ] .

Điều này là không an toàn, không khôn ngoan và bạn cảm thấy đó là điềm xấu và một lời nguyền nhưng nếu bạn không thể đặt tay lên và rút nó ra ...

Lời nguyền : nó sẽ không ghi vào nhật ký, nó sẽ không giết tất cả các tiến trình và chờ kết thúc của nó, nó sẽ không ghi vào ổ cứng cập nhật đúng các nút cũng không ngắt kết nối các hệ thống tập tin; thậm chí đừng bận tâm rằng nó sẽ lưu các tùy chọn của cửa sổ đồ họa và lịch sử vỏ, và nhiều thứ khác ngoài sức tưởng tượng của chúng tôi ... như chúng tôi đã nói tương đương với việc rút hợp âm điện hoặc pin nếu máy tính xách tay.


Cách chính xác
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Phương châm hiệp sĩ Templar.
Cách hợp pháp (chính xác) là sử dụng shutdown[ 3 ]

sudo shutdown -h now

tắt máy sắp xếp cho hệ thống được đưa xuống một cách an toàn. Tất cả người dùng đã đăng nhập đều được thông báo rằng hệ thống đang hoạt động và ...

nhưng với -h nowhọ sẽ không có đủ thời gian để làm quá nhiều ...


Một số từ nữa , còn gọi là Câu chuyện, Chương II Ngày
xửa ngày xưa, một số bước logic cảm nhận từ bầu trời trên những người unix:

Khi các quy trình hệ thống đã bị hủy và các hệ thống tập tin đã bị ngắt kết nối, hệ thống sẽ dừng / tắt nguồn hoặc tự động khởi động lại. Điều này được thực hiện bằng cách sử dụng lệnh tạm dừng hoặc khởi động lại, đồng bộ hóa các thay đổi thành đĩa và sau đó thực hiện tạm dừng / tắt nguồn hoặc khởi động lại thực tế. [ 4 ]

Thật vậy, ngày nay, chúng ta không tin tưởng nữa trong sự tồn tại của ba Moirai [ 5 ] của thế giới Linux , reboot, poweroffhalt[ 6 ] : các khoa học hiện đại của ls -l $(which poweroff halt reboot)và một trong những man reboot, lây lan ánh sáng mới về thời kỳ đen tối này và tiết lộ chúng tôi rằng nó chỉ tồn tại một lệnh thực sự phân tích tất cả các tùy chọn của chúng để cuối cùng chúng ta có thể tự do yêu cầu các hành động mâu thuẫn với tên lệnh của chúng! ( halt -phoặc reboot -pcho poweroff, shutdown -rcho reboot...)

Bây giờ tất cả dường như đã rõ ràng và ấm cúng cho tất cả, các tin đồn cho rằng [ 7 ] rằng trong thế giới ngầm của bộ công cụ hệ thống [ 8 ], một cuộc cách mạng đã được thực hiện khiến cả thế giới không biết . Nhờ có một đội quân tương thích ngược, chúng tôi không nhận thấy rằng tất cả việc khởi động lại, tắt nguồn, tạm dừng [ 6 ] và thậm chí telinit [ 9 ] và tắt máy [ 3 ] đều đã được gắn kết với hệ thống vua mới [ 10 ]. Xin hãy lắng nghe toàn bộ câu chuyện từ giọng nói gốc của JdeBP The Bard [ 9 ] bởi vì tôi không còn hơi thở nữa.

Nếu bạn là tín đồ của giáo phái Ubuntu, bạn vẫn có thể nhận thức được một lúc về tất cả những tuyên bố đó [ 11 ] .


Trái đất giữa halt -f, init, telinit, systemctl
Đang tìm kiếm các giải pháp nhanh hơn so với điều đúng nhưng tương tự như vậy khôn ngoan.

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

Rằng bạn có bị systemd hay không, bạn sẽ có thể dừng máy tính mà không cần gọi tất cả các thủ tục shudown chính xác (và nhanh hơn nữa):

  1. halt -f: chỉ định tùy chọn-f (lưu ý rằng bạn cần -ftránh quy trình tắt máy) bằng lệnh trên, có sudo poweroff -fhoặc thậm chí với sudo reboot -f -h. Thật vậy, chúng ta có thể đọc từ man reboot(và tương đương) về nhu cầu chỉ định tùy chọn -fcần tránh để tắt máy:

    Khi được gọi bằng --force hoặc khi ở runlevel 0 hoặc 6, công cụ này sẽ tự gọi hệ thống khởi động lại (2) (với đối số REBOOTCOMMAND được truyền) và trực tiếp khởi động lại hệ thống .

    Mặt khác, điều này chỉ đơn giản gọi công cụ shutdown (8) với các đối số thích hợp mà không truyền đối số REBOOTCOMMAND.

    -f, --force
    Không gọi tắt máy (8) và thay vào đó thực hiện hành động thực tế mà bạn mong đợi từ tên .

  2. Ngoài ra, bạn có thể sử dụng telinit [ 2b ] (hoặc inittrực tiếp)

    sudo telinit 0    # or 6
    

    để bảo init thay đổi runlevel ... nhưng nếu vậy tại sao không giết nó trực tiếp?

  3. Trong systemd, bạn có thể sử dụng tùy chọn kép không khôn ngoan --force --force

    systemctl --force --force poweroff  
    

    Đọc từ hướng dẫn systemctl [ 10 ]

    -f, --force
    Khi được sử dụng với enable, ghi đè mọi liên kết xung đột hiện có.
    Khi sử dụng với halt, poweroff,reboot hoặc kexec, thực hiện các hoạt động được lựa chọn mà không cần tắt tất cả các đơn vị. Tuy nhiên, tất cả các quy trình sẽ bị giết một cách cưỡng bức và tất cả các hệ thống tệp không được đếm hoặc chỉ đọc lại. Do đó, đây là một lựa chọn quyết liệt nhưng tương đối an toàn để yêu cầu khởi động lại ngay lập tức. Nếu --force được chỉ định hai lần cho các hoạt động này, chúng sẽ được thực thi ngay lập tức mà không chấm dứt bất kỳ quy trình nào hoặc ngắt kết nối bất kỳ hệ thống tệp nào. Cảnh báo: chỉ định - buộc hai lần với bất kỳ thao tác nào trong số này có thể dẫn đến mất dữ liệu.

Ps> Lấy cảm hứng về các biến thể từ đuôi JdeBP The Bard [ 7 ] .


9

Bạn có thể tắt nguồn máy ngay lập tức mà không cần đồng bộ hóa đĩa bằng cách ghi "o" vào / Proc / sysrq-trigger làm root.

Là một kịch bản shell, nó sẽ trông giống như

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

Nếu bạn có quyền trên / Proc / sysrq-trigger, bạn không phải kích hoạt nó thông qua sysctl. Tùy chọn đó chỉ ảnh hưởng đến việc kích hoạt bằng bàn phím.

Tôi không khuyên bạn nên làm điều này trên một máy có bất kỳ hệ thống tập tin nào bạn muốn đọc sau này.

Tôi sử dụng điều này trên Google Compute Engine để tàn sát các trường hợp được tạo khuôn mẫu ngay trước mốc mười phút để tối đa hóa hiệu quả chi phí của các công việc cụm, nó hoạt động rất tốt.


5
Đây là câu trả lời tốt nhất cho câu hỏi này. OP tuyên bố rõ ràng rằng anh ta muốn tắt hệ thống theo cách tương tự như khi rút điện, họ không quan tâm đến thiệt hại hoặc "làm đúng cách". Tôi không hiểu tại sao không ai có thể hiểu điều đó.
Petr

1
bthay vì okhởi động lại (có liên quan vì câu hỏi đã được cập nhật).
Kamil Maciorowski



3

Lấy từ một trang SE khác:

Alt+ SysRq+ Blà khởi động lại ngay lập tức và Alt+ SysRq+ Olà tắt máy ngay lập tức.


Tham khảo: Tại đây


2
có vẻ như bạn đã bỏ lỡ tài liệu tham khảo và trích dẫn câu trả lời của bạn, sau đó tôi sẽ đảo ngược phiếu bầu của mình
Francisco Tapia

Đây là câu trả lời ban đầu: Askubfox.com/a/56072
cst1992

2

Giữ phím nguồn trong khoảng 4 giây, nó khá nhanh.


1
Nếu làm như vậy, lật công tắc nguồn thực sự nhanh hơn;)
Gnoupi

Điều đó cũng giống như bất kỳ phương thức tắt máy nào khác, giả sử rằng HĐH thực hiện quản lý năng lượng.
harrymc

1
Nếu bạn thực sự không thể đợi một vài giây và sẽ giết chết nguồn điện, hãy sử dụng hệ thống tệp nhật ký như ext3 / ext4 để bạn không bị mất nhiều dữ liệu do ghi không được ghi.
CarlF

Không tìm kiếm một cách thức không lập trình / phi phần mềm để thực hiện tắt máy nếu không đề xuất @Gnoupi là cách nhanh hơn. ;)
choc

2

Trên một số bản phân phối linux nhất định, tắt máy cung cấp tùy chọn -n. (Xem người đàn ông tắt máy ). Tuy nhiên, một số bản phân phối nhất định (chẳng hạn như Ubuntu sử dụng upstart thay vì sysvinit) không hỗ trợ cờ của anh ấy và cờ này là (có thể học được từ trang này) không phải không có rủi ro. Mặc dù tôi đã sử dụng điều này trong nhiều năm (trên máy tính xách tay của tôi, tôi không quan tâm rằng tất cả các trình tiện ích đã được chấm dứt đúng cách, nó chỉ muốn mọi thứ bị giết và đĩa đệm của tôi bị tuôn ra) (nó nhanh hơn tắt máy thông thường và an toàn hơn là kéo cắm (và bạn bè)). Bạn có thể thấy nếu điều này giải quyết vấn đề của bạn.


2

Tôi đã sử dụng tập lệnh nhỏ này để tắt hệ thống. Trên thực tế, nó đã sử dụng điều này cho một trò chơi khăm trên máy "tạo mẫu": "Này anh bạn, hãy xem những gì tuyệt vời .sh làm!"

#!/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.

(Tập lệnh này bắt chước giống như nhấn Alt+ SysRq+ u/ s/ onhư đã giải thích trước đó.) Tất nhiên tôi không gây ra sự chấm dứt hệ thống bất thường (bảng mysql, v.v. có thể bị sập), vì vậy chỉ sử dụng trên các máy giả. Lưu ý: Đồng bộ hóa có thể mất một chút thời gian. Tôi đã thấy rằng nếu hệ thống có nhiều bộ nhớ trống (cho bộ nhớ cache) và bạn sao chép một loạt các tệp vào ổ đĩa bút, việc đồng bộ hóa sẽ mất nhiều thời gian hơn, nhưng tôi khuyên bạn nên sử dụng nó ngay cả khi chơi khăm.

Chỉnh sửa: Tốt hơn là sử dụng syncthay vì ghi 's' thành sysrq-trigger: ghi 's' sẽ không chặn thực thi tập lệnh, vì vậy sau khi yêu cầu bộ đệm được ghi vào đĩa, máy sẽ tắt ngay lập tức. Ngược lại với synclệnh, syncsẽ trở lại sau khi quá trình viết được thực hiện. Vì vậy, việc thực thi tập lệnh sẽ bị chặn, cho đến khi hoàn thành việc xóa bộ đệm.


1
Bạn không nên 'trước' bạn '? Ngoài ra, như một vòng lặp:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.