Как отключить компьютер мгновенно (от 1 до 5 секунд) без использования физического переключателя / розетки?


17

Есть ли какая-нибудь команда / программа, с помощью которой я могу мгновенно выключить свою систему (от 1 до 5 секунд)?

Обновление (2015): Спасибо тем, кто предложил отключить через розетку. : D

Обновление (2016): @technophile предложил добавить в вопрос некоторую информацию, описывающую природу проблемы - главным образом, какой сценарий я пытался решить. Вот сценарий, по которому этот вопрос был задан несколько лет назад.

Мы строили систему для развертывания в общественных местах, таких как (аэропорты, отели и т. Д.). Люди могут использовать эту систему для интернет-серфинга, проверки своей электронной почты или даже бронирования и т. Д. С помощью своих кредитных карт. Созданная система обеспечивала, чтобы второй пользователь никоим образом не мог получить информацию (электронную почту, кредитные карты) о предыдущем пользователе этой системы, даже если программное обеспечение типа клавиатурных шпионов каким-либо образом установлено. Как система убедилась в этом? Ну, детали не могут быть переданы, потому что это не публичная информация. но мы разработали способ всегда иметь новую операционную систему (как если бы она была недавно установлена) для нового пользователя системы. Единственная проблема заключалась в том, что нам пришлось выключить компьютер и снова запустить его, как только первый пользователь покинет машину.

И я хотел, чтобы это отключение происходило быстро (вот почему вопрос), и следующая загрузка тоже была очень быстрой, для чего я исследовал и попробовал большое количество дистрибутивов Linux от Damn Small Linux до Slackware, Debian и т. Д., Но это отдельная история.


1
Поскольку самый быстрый код - это тот, который не запускается, я бы сказал, что самый быстрый способ выключить систему - это не включать ее. Объясните, чего вы пытаетесь достичь, если вам нужен конкретный ответ.
Дмитрий Григорьев

2
@ Sam152 какая стена?
шоколад

Вы также хотели указать «без ущерба для моей системы», или это не проблема?
Технофил

@ Технофил, конечно, не навредит моей системе. Но что ты имеешь в виду?
Choc

Моя цель - уточнить, что вы спрашиваете и что вы пытаетесь сделать. Я работаю в электронике; означает "мгновенно" 1 секунду? 1мс? 1us? 1ns? Вы просто нетерпеливы или есть какая-то конкретная потребность? Каковы последствия (например) 6-секундного времени отключения? Я работаю со встроенной системой, которая портит свою SD-карту, если выключение превышает 5 секунд, когда кнопка питания удерживается нажатой. Что делаешь?
Технофил

Ответы:


32
sudo shutdown -h now

9
Это не остановит систему мгновенно . ;)
Марсель Корпель

14
@Marcel Korpel: Мгновенно, без ущерба для своей системы;)
Феликс,

@ Феликс - Я продолжаю слышать, что Linux - очень надежная система, и она не может справиться с теми же «жесткими перезагрузками», что и моя Windows? Было бы удивительно;)
Gnoupi

2
@Gnoupi: Ни одна ОС не может быть построена без какой-либо уязвимости к внезапному завершению работы. В противном случае ответом на самый быстрый способ выключения было бы дернуть шнур питания.
harrymc

1
В некоторых версиях синтаксис отличается. "отключение sudo -g0 -y -i5" (Solaris). И, конечно, просто для того, чтобы сделать это затруднительным, точное значение после «i» может быть разным для выключения в разных системах. Я считаю, что 0 на многих других системах для выключения. Вздох. Должен любить стандарты, так много на выбор!
Брайан Кноблаух

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.


Еще несколько слов , история, глава I
В начале был инициат, и он будет до самого конца.

Весь Linux зависит от заботливого отношения к init [ 1 ] [ 2 ] . Тем не менее, и не без некоторой степени неблагодарности было время, когда добрый лорд- пользователь root мог предать эту любовь и внезапно killначать с неопровержимым ( -9) порядком.
( Книга этикета предписывает пользователям графов, герцогов и маркизов вызывать до а sudo).

Тогда некоторые волшебники сделали заклинание, чтобы защитить init (из Книги man 2 init)

Единственные сигналы, которые могут быть отправлены процессу ID 1, процессу init, - это сигналы, для которых init явно установил обработчики сигналов. Это сделано для того, чтобы система не была случайно отключена.

(Наши шпионы сообщают [ U1 ], что init будет обрабатывать 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Таким образом, добрый лорд- пользователь root узнает новости и меняет команду kill -ABRT 1или kill -SEGV 1обычно генерирует паника ядра и дамп ядра.

Это работает, потому что init является первым процессом, который запускается и получает PID номер 1 [ 2b ] .

Это небезопасно, неразумно, и вы чувствуете, что это предвестник дурного предзнаменования и проклятия, но если вы не можете материально возложить руки и отсоединить его ...

Проклятие : он не будет записывать в журнал, он не будет убивать все процессы и ждать их окончания, он не будет записывать на жесткий диск правильное обновление inode и не будет размонтировать файловые системы; даже не возражайте, это сохранит опции графических окон и истории оболочек, и многие другие за пределами нашего воображения ... как мы сказали, близкий эквивалент отключения сетевого шнура или аккумулятора, если ноутбук.


Правильный путь
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam.", Девиз тамплиеров. Законный (правильный) способ заключается в использовании [ 3 ]
shutdown

sudo shutdown -h now

завершение работы обеспечивает безопасное отключение системы. Все зарегистрированные пользователи уведомляются о том, что система выходит из строя и ...

но у -h nowних не будет достаточно времени, чтобы сделать так много ...


Еще несколько слов , ака История, Глава II
Однажды с неба над людьми из Unix чувствовались логические шаги:

После того, как системные процессы были убиты, а файловые системы были размонтированы, система останавливается / выключается или автоматически перезагружается. Это делается с помощью команды останова или перезагрузки, которая синхронизирует изменения на дисках, а затем выполняет фактическое отключение / выключение питания или перезагрузку. [ 4 ]

Действительно, в настоящее время, мы не верим больше в существование трех Мойры [ 5 ] в мире Linux , reboot, poweroffи halt[ 6 ] : современная наука о ls -l $(which poweroff halt reboot)и один из man rebootспреды новый свет на этот темный век и показать нам что существует только одна истинная команда, которая анализирует все их параметры, так что мы наконец можем запросить действия, противоречащие именам их команд! ( halt -pили reboot -pдля poweroff, shutdown -rдля reboot...)

Теперь, когда все казалось ясным и уютным для всех, слухи утверждают , [ 7 ] , что в преступном мире в Systemd набор инструментов [ 8 ] революция была выполнена оставив не знают всю надземным . Благодаря армии прокладок обратной совместимости мы вообще не заметили, что перезагрузка, poweroff, halt [ 6 ] и даже telinit [ 9 ] и shutdown [ 3 ] уже привязаны к новому королю systemctl [ 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 или нет, вы сможете остановить компьютер, не вызывая все правильные процедуры удаления (и так быстрее):

  1. halt -f: указание опции-f (обратите внимание, что вам нужно -fизбегать процедуры выключения) с помощью вышеуказанной команды, с помощью sudo poweroff -fили, может быть, даже с sudo reboot -f -h. Действительно, мы можем прочитать man reboot(и эквиваленты) о необходимости указать опцию, -fчтобы избежать вызова завершения работы:

    При вызове с параметром --force или на уровне выполнения 0 или 6 этот инструмент вызывает сам системный вызов reboot (2) (с переданным аргументом REBOOTCOMMAND) и непосредственно перезагружает систему .

    В противном случае это просто вызывает инструмент shutdown (8) с соответствующими аргументами без передачи аргумента REBOOTCOMMAND.

    -f, --force
    Не вызывает shutdown (8) и вместо этого выполняет фактическое действие, которое вы ожидаете от имени .

  2. Кроме того, вы можете использовать telinit [ 2b ] (или initнапрямую)

    sudo telinit 0    # or 6
    

    сказать init изменить уровень запуска ... но если так, почему бы не убить его напрямую?

  3. В systemd вы можете использовать опцию unwise double --force --force

    systemctl --force --force poweroff  
    

    Чтение из руководства systemctl [ 10 ]

    -f, --force
    При использовании с enable перезаписать любые существующие конфликтующие символические ссылки.
    При использовании halt, poweroff,reboot или Kexec, выполнить выбранную операцию без отключения всех устройств. Однако все процессы будут принудительно убиты, а все файловые системы отключены или перемонтированы только для чтения. Следовательно, это радикальный, но относительно безопасный вариант запроса немедленной перезагрузки. Если --force указан дважды для этих операций, они будут выполнены немедленно, без остановки каких-либо процессов или размонтирования файловых систем. Предупреждение: указание --force дважды для любой из этих операций может привести к потере данных.

Ps> Вдохновитесь вариантами из хвоста JdeBP The Bard [ 7 ] .


9

Вы можете немедленно выключить компьютер без синхронизации дисков, написав «o» в / proc / sysrq-trigger от имени root.

Как сценарий оболочки это будет выглядеть примерно так

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

Если у вас есть разрешения для / proc / sysrq-trigger, вам не нужно включать его через sysctl. Эта опция влияет только на запуск с клавиатуры.

Я не рекомендую делать это на машине с любой файловой системой, которую вы хотите прочитать позже.

Я использую это в Google Compute Engine для забоя шаблонных экземпляров прямо перед десятиминутной отметкой, чтобы максимизировать рентабельность кластерных заданий, это прекрасно работает.


5
Это лучший ответ на этот вопрос. ОП четко заявляет, что хочет отключить систему аналогичным образом, как если бы он был отключен от электросети, им не важно, что он поврежден или «делает это правильно». Я не понимаю, почему никто не может этого понять.
Петр

1
bвместо oперезагрузки (актуально, так как вопрос был обновлен).
Камиль Мачоровский

7

Вы должны использовать комбинацию клавиш Magic SysRqREISUB .

Повторяйте за мной: « Разводить слонов так скучно ... »


2
Нет. REISUB перезапустит его. REISUO отключится. Или просто О.
Бенуа

5
poweroff

Это должно работать на большинстве распространенных дистрибутивов. В отличие от shutdown, во многих системах вы можете выполнить это как обычный пользователь (sudo не требуется).

Изменить: Дальнейшее чтение:


3

Взято с другого сайта SE:

Alt+ SysRq+ B- это мгновенная перезагрузка, а Alt+ SysRq+ O- это мгновенное отключение.


Ссылка: здесь


2
кажется, вы пропустили ссылку и процитируете свой ответ, тогда я переверну свой голос
Франциско Тапиа

Это оригинальный ответ: askubuntu.com/a/56072
cst1992

2

Удерживайте кнопку питания около 4 секунд, это довольно быстро.


1
В этом случае переключение питания на самом деле происходит быстрее;)
Gnoupi

Это так же, как и любой другой метод выключения, при условии, что ОС управляет питанием.
harrymc

1
Если вы действительно не можете ждать несколько секунд и собираетесь отключить питание, используйте файловую систему журналирования, такую ​​как ext3 / ext4, чтобы не потерять столько данных из-за неписаных записей.
CarlF

Не ищите непрограммный / непрограммный способ выключения, иначе предложение @Gnoupi будет намного быстрее. ;)
шоколад

2

В некоторых дистрибутивах linux shutdown предлагает опцию -n. (См. Отключение человека ). Некоторые дистрибутивы (такие как Ubuntu, который использует upstart вместо sysvinit), однако, не поддерживают его флаг, и этот флаг (как можно узнать из man-страницы) не без риска. Хотя я использую это годами (на моем ноутбуке мне все равно, что все демоны завершены должным образом, он просто хочет, чтобы все было уничтожено и мой дисковый кэш был сброшен) (это быстрее, чем обычное завершение работы, и более безопасно, чем вытягивание подключи (и друзья)). Вы могли видеть, решает ли это вашу проблему.


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вместо записи 's' в sysrq-trigger: запись 's' не будет блокировать выполнение скрипта, поэтому после запроса записи кэша на диск машина немедленно выключится. В отличие от syncкоманды, syncвернется после завершения процесса записи. Таким образом, выполнение скрипта будет заблокировано до завершения очистки кеша.


1
Разве вы не должны быть до «у»? Также в качестве петли:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.