Выключи компьютер!

83

Вызов:

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

правила

  • Нет выключения из-за истощения ресурса (например: форк-бомба для принудительного выключения)
  • Вы можете написать код, который работает только в определенной среде / ОС, если хотите.
  • Стандартные лазейки запрещены

Это , поэтому выигрывает меньшее количество байтов!

П. Ктинос
источник
62
У меня есть друзья, которые делают это в школе и думают, что они «взламывают»: D
RaisingAgent
12
Мы должны придумать какое-то правило, чтобы остановить такой `whatever`;Bash / Perl / PHP / Ruby / и т. Д. stupiglots.
manatwork
260
Windows, 0 байт. Оставьте компьютер
Луис Мендо
28
Кто-нибудь еще заметил отсутствие TIO-ссылок?
Steenbergh
8
@MontyHarder После прочтения этой страницы я решил использовать терминshatdown: past tense of the verb shutdown
FGreg

Ответы:

92

Сборка (x86 / x64, Linux, as) , 22 21 19 байт

mov  $0x58,       %al  # 2 bytes: b0 58
mov  $0xfee1dead, %ebx # 5 bytes: bb ad de e1 fe
mov  $0x28121969, %ecx # 5 bytes: b9 69 19 12 28
mov  $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
int  $0x80             # 2 bytes: cd 80

Должен запускаться от имени root.

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

Тестовый забег

$ as -o poweroff.o poweroff.s
$ ld -o poweroff   poweroff.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400078
$ sudo sh -c 'sync && ./poweroff'
root's password:

Вслед за темнотой.

Как это устроено

int $0x80вызывает программное прерывание. Он работает как на x86, так и на x64, но уже более десяти лет устарел и не должен использоваться в производственном коде. syscallВместо этого следует использовать код x64 . x86 следует использовать sysenter, но это слишком громоздко для кода гольфа.

Результирующее действие системного вызова зависит от регистров EAX - EDX, ESI и EDI. Linux Системный вызов Reference показывает все системные вызовы, которые доступны через int $0x80.

Когда EAX удерживает значение 0x58 (88) , вызывается перезагрузка , которую также можно использовать для выключения компьютера, перевода его в спящий режим или спящего режима компьютера, а также для переключения ядер и отключения или включения комбинации клавиш Ctrl - Alt - Del .

В начале программы - и, компилируя с помощью asили gcc -nostdlib, мы можем убедиться, что мы на самом деле в начале программы - большинство регистров устанавливаются в 0 . Это включает EAX, поэтому мы можем использовать mov $0x58, %alдля установки младших 8 битов EAX значение 0x58 , таким образом, устанавливая сам EAX в 0x58 . Это экономит два байта при ручном обнулении регистра xor %eax, %eaxи еще один при простомmov $0x58, %eax кодировании 0x58 в 32 бита.

Первые два аргумента для перезагрузки - это магические числа, предположительно для предотвращения случайных перезагрузок, которые считываются из регистров EBX и ECX. Если эти числа не равны определенным константам, перезагрузка отказывается выполнять какие-либо действия.

  • Первое магическое число должно равняться 0xfee1dead ( чувствовать себя мертвым ), вероятно, ссылаясь на выключение / смерть ПК.

  • Второе магическое число может быть равно четырем различным константам, хотя последние три не работали в древних версиях Linux. Все они, похоже, относятся к последующему включению / рождению ПК.

    • 0x28121969 представляет день рождения Линуса Торвальдса (28 декабря 1969 года).

    • 0x05121996 представляет день рождения Патриции Торвальдс (5 декабря 1996 г.).

    • 0x16041998 представляет день рождения Даниэлы Торвальдс (16 апреля 1998 г.).

    • 0x20112000 представляет день рождения Селесты Торвальдс (20 ноября 2000 года).

    Патриция, Даниэла и Селеста Торвальдс - три дочери Линуса Торвальдса.

  • Регистр EDX выбирает желаемый тип «перезагрузки». 0x4321fedc - это RB_POWER_OFF , который выключает компьютер и выключает его.

  • Наконец, значение регистра ESI игнорируется для RB_POWER_OFF ; значение регистра EDI полностью игнорируется при перезагрузке .

Альтернативная версия, только для x64, 19 байт

На x64 мы можем использовать правильный системный вызов для того же количества байтов.

mov     $0xa9,       %al  # 2 bytes: b0 a9
mov     $0xfee1dead, %edi # 5 bytes: bf ad de e1 fe
mov     $0x28121969, %esi # 5 bytes: be 69 19 12 28
mov     $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
syscall                   # 2 bytes: 0f 05

Единственные различия заключаются в инструкции ( syscallvs int $0x80), значении __NR_REBOOT ( 0xa9 против 0x58 ) и задействованных регистрах.

Деннис
источник
Мы обычно считаем сборку как скомпилированные байты без байтов кадрирования, требуемых для заголовка exe?
Джошуа
Да, потому что каждая инструкция соответствует определенным байтам в двоичном файле. Файлы ELF (или любой другой формат, используемый в вашей ОС) считаются другим языком и должны создаваться вручную, чтобы получить приличную оценку.
Деннис
Не могли бы вы добавить шестнадцатеричный дамп после сборки кода?
ckjbgames
@ckjbgames Вот оно.
Деннис
Я fee1так deadщас
Arminb
49

PowerShell, 13 байт

Stop-Computer

Довольно понятно? Не работает на ядре PowerShell, поэтому он не будет работать на PowerShell для Linux / MacOS (уже пробовал на TIO :-D).

Бонусная отправка мусора, 12 байт

gcm s*r|iex

В моем тестировании это работает на Windows 2003 с PowerShell 2.0. Он не будет работать на большинстве новых версий и может не работать в зависимости от того, какие модули установлены. Это довольно ужасно!

Это ищет список команд для любой с шаблоном s*rи затем запускает их все! Чтобы было ясно, это опасно, не делай этого!

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

На моей машине 2003 года она возвращает 3 команды:

CommandType     Name                                                Definition                                         
-----------     ----                                                ----------                                         
Application     scrnsave.scr                                        C:\WINDOWS\system32\scrnsave.scr                   
Application     ssmarque.scr                                        C:\WINDOWS\system32\ssmarque.scr                   
Cmdlet          Stop-Computer                                       Stop-Computer [[-ComputerName] <String[]>] [[-Cr...

Да, он запускает экранную заставку, но нет, он не ожидает его завершения перед запуском Stop-Computer.

Этот подход может работать на более новых машинах, опять же, в зависимости от того, какие модули установлены, но лучшее, что я мог сделать в Windows 2012 и 2016, было 14 байт :

gcm sto*er|iex

(и да, конечно, представление winbatch будет работать в PowerShell, и оно короче, но ... это не весело)

briantist
источник
4
Короче для Win7 и Win10 (а может и больше): gcm *p-c*|iex- и результат тоже один!
Боб
@Bob все еще сильно зависит от установленных модулей; на моей машине Win10 он возвращает 6 результатов, некоторые из которых будут иметь обязательные параметры (поэтому они будут запрашивать и никогда не делать Stop-Computer, что является последним результатом).
бриантист
39

Пакетный, 10 байтов

На окнах этого будет достаточно

shutdown/s

Это настроит отключение через одну минуту.

В качестве альтернативы, как указывает @flashbang:

shutdown/p

Это немедленно выключает компьютер.

steenbergh
источник
79
Press the big button on the front of your computer= 0 байт
RaisingAgent
96
@RaisingAgent Здесь, в PPCG, мы решаем наши проблемы в коде. Физический труд осуждается.
Steenbergh
12
@steenbergh Я не знаю ... нажатием одной большой кнопки против 10 нажатий клавиш? Я пойду с кнопкой
WorldSEnder
16
@RaisingAgent Ваше предложение имеет проблемы с масштабируемостью. Попробуйте сделать это для 10.000 компьютеров четыре раза в неделю.
Эмилио М Бумачар
10
@RaisingAgent настоящие мужчины используют переключатель прямо на блоке питания
Cruncher
35

машинный код x86, Lenovo Z510, DOS COM или загрузчик, 7 байт

BITS 16

mov ax, (1 << 13) | (7 << 10)
mov dx, 1804h
out dx, ax

Собран в B8 00 3C BA 04 18 EF

Я эксплуатирую « Вы можете писать код, который работает только в определенной среде / операционной системе, если хотите » до предельного уровня: это будет работать только на Lenovo Z510 1 .

Это записывает SLP_TYPa << 10 | SLP_ENв PM1a_CNTрегистр ACPI, я выгружал эти значения из таблиц ACPI несколько месяцев назад для ответа об отключении (где я даю немного контекста к приведенному выше коду).

Это может быть запущено под DOS как COM (просто запишите двоичные данные в файл и измените расширение на «com») или как загрузчик.
Для последних напишите стандартную подпись и остерегайтесь проблем с современными прошивками .


1 Не совсем верно, любая система с такой же конфигурацией ACPI также будет отключена.

Маргарет Блум
источник
13
Проголосовал из-за ограниченной платформы.
труба
Ха! Кто-нибудь победил Денниса!
Джошуа
Если вы используете 7-байтовый счет, вы должны называть это передачей машинного кода, а не решением для сборки. Размер сборки составляет 63 байта.
Якоб
@ Якоб Вы правы!
Маргарет Блум
Ты выглядишь как правильный человек, чтобы ответить на этот вопрос: stackoverflow.com/questions/2019463/… (я с треском провалился, мне пришлось стереть мой «ответ» из позора.)
Проф. Falken
34

Оболочка GRUB , 4 байта

Golfed

halt

Команда: halt --no-apm

Команда останавливает компьютер. Если указан параметр --no-apm, вызов APM BIOS не выполняется. В противном случае компьютер выключается с помощью APM.

бонус

Вот доказательство того, что GRUB оболочка действительно Tur п ING-полной (см комментарии):

введите описание изображения здесь

дирижабль
источник
оболочка grub не является «языком программирования» - она ​​не завершена по Тьюрингу
Альнитак
9
@Alnitak, что заставляет тебя так думать? Он имеет довольно продвинутый built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivativesи поддерживает переменные, условные конструкции, функции и более , так что, очевидно, это будет Токарно-полной, по любым меркам.
Цеппелин
1
Хорошо, я возьму это обратно - я не нашел этот материал, когда я посмотрел
Альнитак
28
Когда он не может отобразить счетчик это, очевидно , не Tur п ING-полной
J_F_B_M
1
В Bash это та же команда.
Павел Токарз
31

65C02 машинный код, 1 байт

Инструкция STP (0xDB):

STP останавливает тактовый вход 65C02, фактически отключая 65C02 до тех пор, пока не произойдет аппаратный сброс (т. Е. На вывод RES придет низкий уровень). Это переводит 65C02 в состояние низкого энергопотребления. Это полезно для приложений (схем), которые требуют низкого энергопотребления, но STP редко видится иначе.

(Источник: http://www.6502.org/tutorials/65c02opcodes.html )

xxd dump:

00000000: db                                       .
therealfarfetchd
источник
Noice. Я был хакером Apple II и даже не помнил этот код операции.
любезно
1
Да, после того, как я написал эмулятор 65c816 с большим количеством функций и увидел этот вызов, я знал, что делать: P Кроме того, похоже, что пока это единственный однобайтовый ответ! \ o /
therealfarfetchd
24

Matlab, 21 байт

system('shutdown -s')

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

Я добавлю краткое объяснение позже, мой ноутбук в настоящее время выключен.

Стьюи Гриффин
источник
105
«Я добавлю краткое объяснение позже, мой ноутбук в настоящее время выключен». <- Опасность остановки работы
Suever
4
Axaxaxaxa, ну, перезагрузка компьютера время от времени не может быть плохой :)
RaisingAgent
6
uptime
Уэйн Вернер
Зачем отправлять это как MATLAB, а не shutdown -sкак оболочку?
user253751
10
Потому что для меня снаряд - это то, что я нахожу на пляже, или бензоколонка.
Стьюи Гриффин
21

MATLAB, 11 байт

!shutdown/p

Несколько похоже на подход Стьюи Гриффин . Тем не менее, MATLAB имеет путь более короткие пути вызова системных команд; в этом случае !используется. Windows не нуждается .exeв именах команд, так что это также не учитывается. /Вариант все еще поддерживается (я бегу Windows 10), и исключает необходимость в пространстве. Альтернативы:

system shutdown/p % 17 bytes; uses so-called 'command' syntax.
dos shutdown/p    % 14 bytes; the 'dos' command can be used just as well.
Sanchises
источник
19

SmileBASIC, 14 11 6 байт

OPTION

Вызывает сбой, вызывающий перезапуск 3DS. Я надеюсь, что это имеет значение.

Работает в самой последней версии.

12Me21
источник
Я думал, что это было исправлено ... Пожалуйста, укажите номер версии.
wizzwizz4
3
Он был исправлен в версии 3.5, которая еще не была выпущена за пределами Японии.
12Me21
4
@ 12Me21 Конечно, это имеет значение. Хороший выбор окружающей среды.
П. Ктинос
Если только REBOOTиз SBv2 считается действительным ответом.
улитка
16

Баш, 7 6 байт

init 0

Предполагая, что программа запускается от имени пользователя root.

Suever
источник
Действительно, выключение машины не требуется. Таким образом, вам нужен 'halt -p' в качестве правильного ответа
P. Ktinos
4
Это редактирование резни :)
RaisingAgent
@ P.Ktinos: poweroffэто одно слово, хотя букв немного больше.
ccpizza
1
@ccpizza Правильно, но типичным критерием оценки является количество байтов
Suever
13

Java, 101 98 62 42 байта

()->{Runtime.getRuntime().exec("init 0");}

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

Том
источник
2
Короче заменить classна, так interfaceкак это позволяет опустить publicиз основного.
Павел
6
Вы можете использовать метод, поскольку в вопросе не указано, что void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}
1
Разве версия для Linux не будет немного короче?
jpmc26
2
()->{Runtime.getRuntime().exec("init 0");}или предварительно ()->Runtime.getRuntime().exec("init 0")(не могу проверить в данный момент). Это лямбда, реализующая пользовательский интерфейс void, no-args-throwing.
Оливье Грегуар
1
Это должно быть помечено как специфичный для Linux ответ, например, «Java на LInux».
Якоб
13

Python 2, 29 байт

import os;os.system('init 0')

Работает в системах Linux и требует привилегий root.

Для Windows 33 байта

import os;os.system('shutdown/p')

Это может быть наименее интересный или полезный код, который я когда-либо писал.

Гурупад Мамадапур
источник
2
Кто-то еще опубликовал версию оболочки Linux.
jpmc26
1
Ах, хорошо, мой плохой ..
FlipTack
12

Commodore 64, 11 байт

0 sys64738

Это из приглашения BASIC. Или же...

Commodore 64, сборка 6502, 3 байта (в сборе), 16 байтов (источник)

*=8000
JMP $FCE2
Шон Бебберс
источник
Я думаю, что использование режима прямого ввода Commodore 64 от BASIC с sys64738использованием нулевых байтов, поскольку нет ни программы, ни чего-либо еще для хранения; Вы используете экранную память, но эта память уже будет заполнена пробелами, поэтому вы просто заменяете эти пробелы текстом.
Шон Бебберс
2
Исходный код занимает место. Тот факт, что он не резервирует место на целевой машине , не означает, что он занимает 0 байтов. В противном случае ответ будет ``.
wizzwizz4
3
Вам не нужно пробел между 0и sys64738, вы можете заменить sysформу ярлыком sY, и я не считаю завершающий символ новой строки в длине программы. Однако я не думаю, что ваш код соответствует требованиям: код в 64738 выполняет программный сброс, а не выключение питания.
Марк
2
Не выключается
TecBrat
1
Однажды я пролил пиво на мой Commodore 64, который постоянно его выключал. Это считается?
Шон Бебберс
12

TI-Nspire CX CAS, 3 байта

" "+" "

суммирование двух пустых строк.

В более старой версии калькулятора это приводило к сбою устройства и его перезагрузке (нет способа выключить устройство без перезагрузки, кроме физических комбинаций кнопок).

Видео от Adriweb

devRicher
источник
Разве это не 7 байтов?
Роман Греф
Звучит убедительно для меня.
Роман Греф
11

С ++, 51 40 байт

-11 байт благодаря Ingve !

#include<os>
int main(){OS::shutdown();}

Работает только в IncludeOS (v0.10.0-rc.1)

Контрольная работа:

$ pwd
/home/simon/IncludeOS/examples/demo_service

$ cat service.cpp
#include<os>
int main(){OS::shutdown();}

$ mkdir build && cd build && cmake .. && make && cd ..
[...]

$ boot build/IncludeOS_example
[...]
================================================================================
================================================================================
 IncludeOS v0.10.0-rc.1-9-g151a2b9
 +--> Running [ IncludeOS minimal example ]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$
Саймон
источник
1
Теперь мне интересно узнать о IncludeOS
Карл Напф
@KarlNapf Альфред провел отличную презентацию на CppCon 2016 по поводу IncludeOS: youtube.com/watch?v=t4etEwG2_LY, если вы хотите узнать больше :-)
simon
1
Вам не нужно использовать void Service::start, int main работает и в IncludeOS .
Ingve
10

AppleScript, 30 байт

tell app "Finder" to shut down

Делает именно то, что говорит: говорит Finder, чтобы выключить компьютер.

отметка
источник
9

AutoHotkey, 11 10 байт

Сохранил байт благодаря Гурупад Мамадапур

Shutdown,9

AHK Поддерживает команду выключения по умолчанию. 9Представляет собой флаг, состоящий из Shutdown=1+ PowerDown=8.

Ataco
источник
1
AHKтаинственный
Гурупад Мамадапур
Вам нужно место после запятой?
therealfarfetchd
пространство после ,не нужно. Попробуйте проверить это с другим флагом. Я думал, что это не сразу выключит компьютер, и поместил его в мой основной скрипт, который загружается при запуске: D Теперь я должен загрузить в безопасном режиме и решить проблему. Вздох.
Гурупад Мамадапур
9

Машинный код (x86, загрузчик) 18 байт

b8 01 53 33 db cd 15 b8 07 53 bb 01 00 b9 03 00 cd 15

Разборка:

mov ax, 0x5301 ; connect to real-mode APM services
xor bx, bx     ; device id 0 - APM BIOS
int 0x15       ; call APM
mov ax, 0x5307 ; set power state
mov bx, 0x0001 ; on all devices
mov cx, 0x0003 ; to Off
int 0x15       ; call APM

Вы можете проверить это в отладчике Bochs с помощью следующих команд (после запуска симуляции, после установки какого-либо диска):

pb 0x7c00
c
setpmem 0x7c00 4 0x335301b8
setpmem 0x7c04 4 0xb815cddb
setpmem 0x7c08 4 0x01bb5307
setpmem 0x7c0c 4 0x0003b900
setpmem 0x7c10 2 0x15cd
c

Этот же машинный код также будет работать как исполняемый файл DOS ( *.COM).

Руслан
источник
7

C #, 79 54 53 байта

Это работает на Windows.

79 байтов :

class _{static void Main(){System.Diagnostics.Process.Start("shutdown","/s");}}

53 байта , благодаря TheLethalCoder:

_=>System.Diagnostics.Process.Start("shutdown","/s");
Дариуш Возняк
источник
2
Обратите внимание, что задача не требует полной программы и не запрещает принимать входные данные (конечно, неиспользуемые), так что вы можете скомпилировать Action<int>и сделать _=>System.Diagnostics.Process.Start("shutdown", "/s");для 54 байтов.
TheLethalCoder
@TheLethalCoder, обновлено, спасибо!
Дариуш Возняк
Вы также можете удалить ненужное место.
nothrow
Конечно да! Спасибо, @nothrow :)
Дариуш Возняк
6

AutoIt, 11 байт

Shutdown(1)

Функция выключения получает комбинацию следующих кодов

0 = Logoff
1 = Shutdown
2 = Reboot
4 = Force
8 = Power down
16= Force if hung
32= Standby
64= Hibernate

Например, для выключения и выключения необходимо ввести код 9 (выключение + выключение = 1 + 8 = 9).

rahnema1
источник
1
0(выход из системы) здесь особый случай; он не объединяется с Standby или Hibernate неявным образом.
wizzwizz4
ОК0 + 32 = 32
rahnema1
Хм, так всегда ли выходит из системы перед переходом в режим ожидания / гибернацию?
Руслан
@Ruslan Я не знаю точно, как это работает, Вы можете обратиться к форуму пользователей AutoIt, чтобы получить больше отзывов :-)
rahnema1
6

Windows - NativeAPI, 212 байт

Хорошо, это не самая короткая версия. Но, может быть, некоторым это интересно. Это не будет выполняться в подсистеме Win32. Однако он будет работать при выполнении в контексте нативного API (как это делает autochk.exe)

Код

#define WIN32_NO_STATUS
#include <windef.h>
#include <winnt.h>
#include <ntndk.h>
NTSTATUS main() {
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,NULL);
return ZwShutdownSystem(ShutdownPowerOff);
}

строить

Чтобы построить это, используйте build.exeинструмент WinDDK (с соответствующим sourceфайлом дляNMAKE )

Или используйте эти команды для компиляции и ссылки:

cl /Gd /D_X86_ /showIncludes /I%DDK_INC_PATH% /I%CRT_INC_PATH% /c main.c
link /verbose /nodefaultlib /subsystem:native /machine:X86 /entry:NtProcessStartup@4 C:\WinDDK\7600.16385.1\lib\win7\i386\nt.lib C:\WinDDK\7600.16385.1\lib\win7\i386\ntdllp.lib C:\WinDDK\7600.16385.1\lib\win7\i386\BufferOverflow.lib .\main.obj 

Примечание: это создаст собственный исполняемый файл x86. Измените соответствующие биты, если вы хотите построить это для другой архитектуры.

Контрольная работа

Чтобы протестировать собственный исполняемый файл, вы должны выполнить его до загрузки подсистемы win32. Один из распространенных способов сделать это - добавить исполняемый файл в следующий раздел реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute

Предупреждение

Однако, если вы сделаете это, у вас должна быть возможность редактировать куст реестра целевой ОС из другой ОС. Поскольку вы больше не сможете загружать целевую ОС!

Я сделал это на виртуальной машине, где я мог легко вернуться к предыдущему снимку!

MrPaulch
источник
5

Groovy, 23 байта

'shutdown /p'.execute()
Гурупад Мамадапур
источник
2
Нужно ли место перед косой чертой?
Steenbergh
3
@steenbergh Да, это необходимо.
Гурупад Мамадапур
@GurupadMamadapur вы уверены?
TrojanByAccident
5

Большинство оболочек Linux, 15 байт

# echo o>/p*/*ger

Это может быть сделано в 11 байт, если вы оказались в /procкаталоге:

# echo o>*ger

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

Радован Гарабик
источник
1
В прошлый раз, когда я пробовал расширение подстановочного знака при перенаправлении, он генерировал файл с подстановочным знаком в нем, несмотря на соответствующий файл, существующий.
Джошуа
5
Я считаю , что вы должны добавить «/ Proc /» на свой байт счета
дирижабль
@ Джошуа Это может зависеть от оболочки. Я фактически проверил это (с bash) на моем компьютере :-)
Радован Гарабик
1
@Radovan Garabík - Я не думаю, что это действительно так. Это в основном то же самое, что подразумевать наличие псевдонима «p = poweroff» (что тоже не «невозможно») и утверждать, что «p» является допустимым 1-байтовым решением.
Цеппелин
1
Но вы , вероятно , может сделать его действительным на счет всего 3 байта, как этотecho o>/p*/*ger
дирижабль
5

Оболочка Android, 9 байт

reboot -p
Педро Лобито
источник
7
Добро пожаловать в PPCG!
ETHproductions
5

AppleScript, 44 байта

tell application "Finder"
shut down
end tell

Я не знаю, как работает синтаксис AppleScript или что-то еще, поэтому, если кто-нибудь знает, как сократить это, пожалуйста, сообщите.

Кроме того, я делаю это на своем телефоне в школе («взлом»), поэтому я не могу проверить это.

На 14 байт меньше (спасибо kindall) можно сказать

tell app "Finder" to shut down
Даниил
источник
Кто-то предложил
devRicher
Вы, вероятно, можете удалить отступ
Cyoce
4
tell app "Finder" to shut downдолжен работать, я считаю (хотя компиляция может заменить «приложение» на «приложение»).
любезно
4

J, 14 байт

2!:0'poweroff'

Работает на системах Linux. 2!:0выполняет строку в /bin/sh.

миль
источник
4

Clojure, 40 39 байт

(.exec(Runtime/getRuntime)"shutdown/s")

-1 байт, поменяв флаг с -sна/s , что позволило мне избавиться от пробела.

В основном ответ Java.

Тестировать это было весело. Windows решила обновить прошивку на моем Surface, как только он выключится. Конечно.

(defn shutdown []
  (.exec (Runtime/getRuntime) "shutdown -s"))
Carcigenicate
источник
2

Node.js, 39 байт

Linux

require('child_process').exec('init 0')
Том
источник
2

AHK, 19 15 байт

Run,Shutdown -s

Работает только на окнах.

Гурупад Мамадапур
источник
2

C ++, 48 47 (Windows) 46 45 (Linux) байт

Удалил 1 байт благодаря Snowman

#include<cstdlib>
main(){system("shutdown/p");}

Это должно выключить систему для Windows

#include<cstdlib>
main(){system("poweroff");}

Это должно выключить систему для Linux

fənɛtɪk
источник
тебе нужно ;?
RaisingAgent
1
@LliwTelracs Уверен, что это «shutdown / p», а не «-p», и место не требуется.
П. Ктинос
Точка с запятой требуется для правильного синтаксиса c ++, использование косой черты позволяет получить более короткий ответ для окон, но больше не работает для Linux. Хотя я добавил неправильный символ для завершения работы, который используется в Windows и Linux
fəˈnɛtɪk
@LliwTelracs Несмотря на то, что вы можете делать все, что захотите, я предлагаю злоупотреблять 2-м правилом и не заботиться о функциональности Linux, поскольку это код-гольф, а небольшое количество байтов лучше.
П. Ктинос
1
#include<cstdlib> побреет байт.