Desligar o computador!

83

Desafio:

Na linguagem de programação de sua escolha, desligue a máquina na qual seu código foi executado.

Regras

  • Sem desligamento por exaustão de recursos (por exemplo: forkbomb para forçar o desligamento)
  • Você tem permissão para escrever código que funcione apenas em um ambiente / SO específico, se desejar.
  • As brechas padrão são proibidas

Isso é , e assim ganha a menor quantidade de bytes!

P. Ktinos
fonte
62
Eu tenho amigos, que fazem isso na escola e pensam que estão '
invadindo
12
Deveríamos criar uma regra uma vez para parar o `whatever`;Bash / Perl / PHP / Ruby / etc. stupiglots.
manatwork
260
Windows, 0 bytes. Deixe o computador ligado por alguns dias e deixe que as atualizações automáticas façam seu trabalho.
Luis Mendo
28
Mais alguém notou a falta de links TIO?
23417
8
@MontyHarder Depois de ler essa página eu decidi inventar o termoshatdown: past tense of the verb shutdown
FGreg

Respostas:

92

Assembly (x86 / x64, Linux, as) , 22 21 19 bytes

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

Deve ser executado como root.

Isso equivale a pressionar o botão liga / desliga e não é uma maneira segura de desligar o PC. Certifique-se de fechar todos os aplicativos abertos e executar syncpara liberar todos os buffers do sistema de arquivos antes de executar este programa, para minimizar pelo menos o risco de corrupção de arquivos.

Execução de teste

$ 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:

Seguido pela escuridão.

Como funciona

int $0x80chama uma interrupção de software. Ele funciona em x86 e x64, mas está obsoleto há mais de uma década e não deve ser usado no código de produção. código x64 deve usar em seu syscalllugar. O x86 deve ser usado sysenter, mas é muito complicado para o código de golfe.

A ação resultante do syscall depende dos registros EAX - EDX, ESI e EDI. A Referência do Syscall do Linux mostra todos os syscalls disponíveis via int $0x80.

Quando o EAX retém 0x58 (88) , a reinicialização é chamada, que também pode ser usada para desligar, adormecer ou hibernar o computador, além de alternar entre os kernels e desativar ou ativar a combinação de teclas Ctrl - Alt - Del .

No início do programa - e compilando com asou gcc -nostdlib, podemos garantir que estamos realmente no início do programa - a maioria dos registros é definida como 0 . Isso inclui o EAX, para que possamos mov $0x58, %aldefinir os 8 bits inferiores do EAX para 0x58 , configurando o EAX para 0x58 . Isso economiza dois bytes ao zerar manualmente o registro com xor %eax, %eaxe mais um ao lado, mov $0x58, %eaxque codifica 0x58 em 32 bits.

Os dois primeiros argumentos para reinicialização são números mágicos, presumivelmente para impedir reinicializações acidentais, e são lidos nos registros EBX e ECX. A menos que esses números sejam iguais a certas constantes, a reinicialização se recusa a executar qualquer ação.

  • O primeiro número mágico deve ser igual a 0xfee1dead ( sentir-se morto ), provavelmente se referindo ao desligamento / morte do PC.

  • O segundo número mágico pode ser igual a quatro constantes diferentes, embora os três últimos não funcionem nas versões antigas do Linux. Todos eles parecem se referir à alimentação subsequente / nascimento do PC.

    • 0x28121969 representa o aniversário de Linus Torvalds (28 de dezembro de 1969).

    • 0x05121996 representa o aniversário de Patricia Torvalds (5 de dezembro de 1996).

    • 0x16041998 representa o aniversário de Daniela Torvalds (16 de abril de 1998).

    • 0x20112000 representa o aniversário de Celeste Torvalds (20 de novembro de 2000).

    Patricia, Daniela e Celeste Torvalds são as três filhas de Linus Torvalds.

  • O registro EDX seleciona o tipo de "reinicialização" que queremos. 0x4321fedc é RB_POWER_OFF , desligando o PC e desligando-o.

  • Finalmente, o valor do registro ESI é ignorado para RB_POWER_OFF ; o valor do registro EDI é totalmente ignorado pela reinicialização .

Versão alternativa, somente x64, 19 bytes

No x64, podemos usar um syscall apropriado para a mesma contagem de bytes.

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

As únicas diferenças estão na instrução ( syscallvs int $0x80), no valor de __NR_REBOOT ( 0xa9 vs 0x58 ) e nos registros envolvidos.

Dennis
fonte
Normalmente contamos a montagem como bytes compilados sem os bytes de estrutura necessários para o cabeçalho exe?
Joshua Joshua
Sim, porque cada instrução corresponde a bytes específicos no arquivo binário. Os arquivos ELF (ou qualquer formato que seu sistema operacional use) são considerados um idioma diferente e precisariam ser criados manualmente para obter uma pontuação decente.
Dennis
Você poderia adicionar o hexadecimal após a montagem do código?
Ckjbgames
@ckjbgames Aqui está.
Dennis
I fee1assim deadagora.
Arminb
49

PowerShell, 13 bytes

Stop-Computer

Bastante auto-explicativo? Não funciona no núcleo do PowerShell, portanto não funcionará no PowerShell para Linux / MacOS (já tentei no TIO :-D).

Envio de lixo bônus, 12 bytes

gcm s*r|iex

Nos meus testes, isso funciona no Windows 2003 com PowerShell 2.0. Ele não funciona na maioria das versões mais recentes e pode não funcionar dependendo de quais módulos estão instalados. É terrível!

Isso procura na lista de comandos qualquer um com o padrão s*re, em seguida, executa todos eles! Para ser claro, isso é perigoso, não faça isso!

O truque, é claro, é obter uma lista de comandos que não possuem parâmetros obrigatórios, caso contrário, o PowerShell solicitará um valor.

Na minha máquina 2003, os três comandos que ele retorna são:

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...

Sim, ele inicia o protetor de tela de marca de seleção, mas não, ele não espera que seja concluído antes do lançamento Stop-Computer.

Essa abordagem pode funcionar em máquinas mais novas, dependendo novamente de quais módulos estão instalados, mas o melhor que pude fazer no Windows 2012 e 2016 foi de 14 bytes :

gcm sto*er|iex

(e sim, claro, o envio do winbatch funcionará no PowerShell e é mais curto, mas isso não é divertido)

briantist
fonte
4
Um mais curto para o Win7 e o Win10 (e talvez mais): gcm *p-c*|iex- e há apenas um resultado também!
Bob
@Bob altamente dependente dos módulos instalados ainda; na minha máquina Win10, ele retorna 6 resultados, vários dos quais terão parâmetros obrigatórios (para que sejam solicitados e nunca cheguem Stop-Computer, qual é o último resultado).
briantist
39

Lote, 10 bytes

No Windows, isso seria suficiente

shutdown/s

Isso configurará um desligamento em um minuto.

Como alternativa, como aponta @flashbang:

shutdown/p

Isso desliga o computador imediatamente.

steenbergh
fonte
79
Press the big button on the front of your computer= 0 bytes
RaisingAgent
96
@RaisingAgent Aqui no PPCG resolvemos nossos problemas no código. O trabalho físico é desaprovado.
precisa saber é o seguinte
12
@steenbergh Eu não sei ... pressionando um botão grande vs 10 pressionamentos de tecla? Eu vou com o botão
WorldSEnder
16
@RaisingAgent Sua proposta tem problemas de escalabilidade. Tente fazer isso para 10.000 computadores quatro vezes por semana.
Emilio M Bumachar
10
@RaisingAgent homens reais usar o interruptor que fica na PSU
Cruncher
35

código de máquina x86, Lenovo Z510, DOS COM ou Bootloader, 7 bytes

BITS 16

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

Montado em B8 00 3C BA 04 18 EF

Estou explorando " Você tem permissão para escrever código que funcione apenas em um ambiente / sistema operacional específico, se desejar " até o nível mais alto: isso funcionará apenas no Lenovo Z510 1 .

Isso grava SLP_TYPa << 10 | SLP_ENno PM1a_CNTregistro da ACPI, despejei esses valores das tabelas da ACPI meses atrás para obter uma resposta sobre o desligamento (onde dou um pouco de contexto ao código acima).

Isso pode ser executado no DOS como um COM (basta gravar os dados binários em um arquivo e alterar a extensão para "com") ou como um carregador de inicialização.
Para este último, escreva a assinatura padrão e cuidado com os problemas do firmware moderno .


1 Não é rigorosamente verdade, qualquer sistema que tenha a mesma configuração ACPI também será encerrado.

Margaret Bloom
fonte
13
Promovido por causa da plataforma limitada.
pipe
Ha! Alguém venceu o Dennis!
Joshua Joshua
Se você optar pela contagem de 7 bytes, chame isso de envio de código de máquina em vez de solução de montagem. O envio da montagem é de 63 bytes.
Jakob
@Jakob Você está certo!
28518 Margaret Bloom
Você parece a pessoa certa para responder a esta pergunta: stackoverflow.com/questions/2019463/… (Eu falhei miseravelmente, tive que excluir minha "resposta" por vergonha.)
Prof. Falken
34

Shell GRUB , 4 bytes

Golfe

halt

Comando: halt --no-apm

O comando interrompe o computador. Se a opção --no-apm for especificada, nenhuma chamada do APM BIOS será executada. Caso contrário, o computador será desligado usando o APM.

Bônus

Aqui está uma prova de que shell do GRUB é realmente Tur n ing-completo (ver comentários):

insira a descrição da imagem aqui

zepelim
fonte
shell grub não é uma "linguagem de programação" - não é Turing completa
Alnitak
9
@ Alnitak, o que faz você pensar assim? Possui um bastante avançado built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivativese suporta variáveis, construções condicionais, funções e muito mais , portanto, obviamente, é Turning-complete, por qualquer medida.
Zeppelin
1
OK, eu vou ter que voltar - I não encontrou esse material quando eu olhei
Alnitak
28
Quando ele não pode exibir um spinner, obviamente, não é Tur n ing-complete
J_F_B_M
1
No Bash, é o mesmo comando.
Paweł Tokarz
31

Código de máquina 65C02, 1 byte

Instrução STP (0xDB):

STP interrompe a entrada do relógio do 65C02, efetivamente desligando o 65C02 até que ocorra uma redefinição de hardware (ou seja, o pino RES fica baixo). Isso coloca o 65C02 em um estado de baixa energia. Isso é útil para aplicações (circuitos) que exigem baixo consumo de energia, mas o STP raramente é visto de outra maneira.

(Fonte: http://www.6502.org/tutorials/65c02opcodes.html )

Despejo xxd:

00000000: db                                       .
therealfarfetchd
fonte
Noice. Eu era um hacker do Apple II naquela época e nem me lembrava desse código de operação.
Kindall
1
Sim, depois de escrever um emulador 65c816 com mais recursos e vi esse desafio, eu sabia o que fazer: P Além disso, parece que essa é a única resposta de 1 byte até agora! \ o /
therealfarfetchd
24

Matlab, 21 bytes

system('shutdown -s')

Eu não tentei isso (fechar todos os programas para reiniciar no meio do dia não é realmente tentador), mas deve funcionar. . Isso funciona...

Vou adicionar uma breve explicação mais tarde, meu laptop está desligado.

Stewie Griffin
fonte
105
"Acrescentarei uma breve explicação mais tarde, meu laptop está desligado." <- O perigo de um desafio de desligamento
Suever
4
Axaxaxaxa, bem, reiniciar o computador de vez em quando pode não ser ruim :)
RaisingAgent
6
No uptimeentanto, você arruina o seu ...
Wayne Werner
Por que enviar isso como MATLAB, em vez de enviar shutdown -scomo shell?
precisa saber é o seguinte
10
Porque, para mim, a concha é algo que encontro na praia ou um posto de gasolina.
Stewie Griffin
21

MATLAB, 11 bytes

!shutdown/p

Um pouco semelhante à abordagem de Stewie Griffin . No entanto, MATLAB tem forma formas mais curtas de invocar comandos do sistema; neste caso, !é usado. O Windows não precisa .exede nomes de comando, então isso também é deixado de fora. A /opção ainda é suportada (estou executando o Windows 10) e nega a necessidade de espaço. As alternativas são:

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
fonte
19

SmileBASIC, 14 11 6 bytes

OPTION

Desencadeia uma falha que faz com que o 3DS seja reiniciado. Espero que isso conte.

Funciona na versão mais recente.

12Me21
fonte
Pensei que isso tivesse sido corrigido ... Inclua um número de versão.
precisa saber é o seguinte
3
Foi corrigido na versão 3.5, que ainda não foi lançada fora do Japão.
12Me21
4
@ 12Me21 Claro que conta. Boa escolha de ambiente.
P. Ktinos
Se apenas REBOOTdo SBv2 contasse como uma resposta válida.
snail_
16

Bash, 7 6 bytes

init 0

Supondo que o programa seja executado como root.

Suever
fonte
Na verdade, é necessário desligar a máquina. Assim, você precisa '-p impasse' como uma resposta válida
P. Ktinos
4
Este massacre de edição :)
RaisingAgent
@ P.Ktinos: poweroffé uma única palavra, embora um pouco mais de letras.
Ccpizza
1
@ccpizza direito, mas os critérios de pontuação típicas é contagem de bytes
Suever
13

Java, 101 98 62 42 bytes

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

Como o @Snowman apontou, a pergunta não especificou se era necessário um programa completo; portanto, isso ainda deve ser aceitável.

Tom
fonte
2
É mais curto para substituir classcom interfacea que permite omitir publicda principal.
Pavel
6
Você pode usar um método, pois a pergunta não especificou o envio deve ser um programa completo:void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}
1
A versão do Linux não seria um pouco menor?
Jpmc26
2
()->{Runtime.getRuntime().exec("init 0");}ou provisoriamente ()->Runtime.getRuntime().exec("init 0")(não é possível verificar no momento). É um lambda implementando uma interface personalizada void e sem argumentos.
Olivier Grégoire
1
Isso deve ser rotulado como uma resposta específica do Linux, por exemplo, "Java no LInux".
Jakob
13

Python 2, 29 bytes

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

Funciona em sistemas Linux e precisa de privilégios de root.

Para Windows, 33 bytes

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

Esse pode ser o código menos interessante ou útil que eu já escrevi.

Gurupad Mamadapur
fonte
2
Alguém postou a versão do shell do Linux.
Jpmc26
1
Ah, ok, meu mal ..
FlipTack 26/01
12

Comodoro 64, 11 bytes

0 sys64738

Isso é do prompt do BASIC. Ou...

Commodore 64, montagem 6502, 3 bytes (montado), 16 bytes (origem)

*=8000
JMP $FCE2
Shaun Bebbers
fonte
Eu acho que o uso do modo de entrada direta do Commodore 64 do BASIC com sys64738usará zero bytes, pois não há nenhum programa ou qualquer outra coisa para armazenar; Você está usando a RAM da tela, mas essa RAM já estará preenchida com espaços, portanto, você está apenas substituindo esses espaços por texto.
Shaun Bebbers
2
O código fonte ocupa espaço. Só porque ele não reserva espaço na máquina de destino , não significa que ele ocupa 0 bytes. Caso contrário, a resposta seria ``.
precisa saber é o seguinte
3
Você não precisa do espaço entre o 0e o sys64738, pode substituir o syspelo atalho sY, e eu não conto a nova linha à direita no comprimento do programa. No entanto, não acho que seu código atenda aos requisitos: o código em 64738 faz uma reinicialização suave, não um desligamento.
Mark
2
Não desliga.
TecBrat 27/01
1
Certa vez, derramei cerveja no meu Commodore 64, que o desligou permanentemente. Isso conta?
Shaun Bebbers
12

TI-Nspire CX CAS, 3 bytes

" "+" "

somando duas cadeias vazias.

Em uma versão mais antiga da calculadora, isso travaria o dispositivo e causaria a reinicialização (não há como desligar um dispositivo sem a reinicialização além das combinações físicas de botões).

Vídeo por Adriweb

devRicher
fonte
Isso não é 7 bytes?
Roman Gräf
Parece convincente para mim.
Roman Gräf
11

C ++, 51 40 bytes

-11 bytes graças ao Ingve !

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

Funciona apenas no IncludeOS (v0.10.0-rc.1)

Teste:

$ 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 ]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$
simon
fonte
1
Agora, estou curioso sobre o IncludeOS #
Karl Napf
@KarlNapf Alfred realizou uma grande apresentação no CppCon 2016 sobre IncludeOS: youtube.com/watch?v=t4etEwG2_LY se você quiser saber mais :-)
simon
1
Você não precisa usar void Service::start, int main funciona no IncludeOS também.
Ingve
10

AppleScript, 30 bytes

tell app "Finder" to shut down

Faz exatamente o que diz: diz ao Finder para desligar o computador.

Marca
fonte
9

AutoHotkey, 11 10 bytes

Guardou um byte graças a Gurupad Mamadapur

Shutdown,9

AHK Suporta um comando Shutdown por padrão. O 9sinalizador consiste em Shutdown=1+ PowerDown=8.

ATaco
fonte
1
AHKé misterioso.
Gurupad Mamadapur
Você precisa do espaço após a vírgula?
therealfarfetchd
espaço depois ,não é necessário. Tente testá-lo com um sinalizador diferente. Eu pensei que isso não desligaria o computador imediatamente e o colocaria no meu script principal que é carregado na inicialização: D Agora eu tenho que carregar no modo de segurança e resolver o problema. Suspiro.
Gurupad Mamadapur
9

Código da máquina (x86, carregador de inicialização) 18 bytes

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

Desmontagem:

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

Você pode testá-lo no depurador de Bochs com os seguintes comandos (após iniciar a simulação, com a instalação de alguma unidade de disco):

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

Esse mesmo código de máquina também funcionará como um executável do DOS ( *.COM).

Ruslan
fonte
7

C #, 79 54 53 bytes

Isso funciona no Windows.

79 bytes :

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

53 bytes , graças a TheLethalCoder:

_=>System.Diagnostics.Process.Start("shutdown","/s");
Dariusz Woźniak
fonte
2
Observe que o desafio não requer um programa completo e não permite a entrada de uma entrada (não utilizada, é claro), para que você possa compilar Action<int>e executar _=>System.Diagnostics.Process.Start("shutdown", "/s");por 54 bytes.
TheLethalCoder
@TheLethalCoder, atualizado, obrigado!
Dariusz Woźniak
Você também pode remover o espaço desnecessário.
nothrow
Claro que sim! Obrigado, @nothrow :)
Dariusz Woźniak
6

AutoIt, 11 bytes

Shutdown(1)

A função Shutdown obtém a combinação dos seguintes códigos

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

Para desligar e desligar, por exemplo, o código seria 9 (desligamento + desligamento = 1 + 8 = 9).

rahnema1
fonte
1
0(logoff) é um caso especial aqui; não combina com o modo de espera ou o hibernar implicitamente.
precisa saber é o seguinte
OK0 + 32 = 32
rahnema1
Hm, o mesmo sempre desconecta antes de entrar em espera / hibernação?
Ruslan
@Ruslan Eu não sei exatamente como ele funciona, você pode se referir a fórum de usuários AutoIt para receber mais opiniões :-)
rahnema1
6

Windows - NativeAPI, 212 bytes

Ok, essa não é realmente a versão mais curta. Mas talvez seja interessante para alguns. Isso não executado no subsistema Win32. No entanto, ele será executado quando executado dentro do contexto da API nativa (como autochk.exe)

Código

#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);
}

Construir

Para criar isso, use a build.exeferramenta WinDDK (com um sourcearquivo apropriado paraNMAKE )

Ou use estes comandos para compilar e vincular:

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 

Nota: Isso criará um executável nativo x86. Altere os bits apropriados se desejar criar isso para uma arquitetura diferente.

Teste

Para testar um executável nativo, você deve executá-lo antes do carregamento do subsistema win32. Uma maneira comum de fazer isso é anexar o executável na seguinte chave do Registro:

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

Aviso

Se você fizer isso, no entanto, precisará ter uma opção para editar a seção de registro do sistema operacional de destino de outro sistema operacional. Desde a você não poderá mais inicializar o sistema operacional de destino!

Eu fiz isso em uma VM onde eu poderia facilmente reverter para um instantâneo anterior!

MrPaulch
fonte
5

Groovy, 23 bytes

'shutdown /p'.execute()
Gurupad Mamadapur
fonte
2
O espaço antes da barra é necessário?
23417
3
@steenbergh Sim, é necessário.
Gurupad Mamadapur
@GurupadMamadapur você tem certeza?
TrojanByAccident
5

A maioria dos shells do Linux, 15 bytes

# echo o>/p*/*ger

Pode ter 11 bytes de comprimento, se você estiver no /procdiretório:

# echo o>*ger

Isso é muito direto (não tem efeitos colaterais, como desmontar sistemas de arquivos ou matar processos) e bastante brutal.

Radovan Garabík
fonte
1
A última vez que tentei expandir o curinga no redirecionamento, gerou um arquivo com o curinga, apesar de existir um arquivo correspondente.
Joshua
5
Eu acredito que você tem que adicionar "/ proc /" para o seu byte contagem
zeppelin
@ Josué Pode ser dependente do shell. Na verdade, eu testei (com bash) no meu computador :-)
Radovan Garabík
1
@Radovan Garabík - Eu não acho que isso seja realmente válido. Isso é basicamente o mesmo que implica que existe um pseudônimo "p = poweroff" (o que também não é "impossível") e alegando que "p" é uma solução válida de 1 byte .
Zeppelin
1
Mas você provavelmente pode torná-lo válido às custas de apenas 3 bytes, desta formaecho o>/p*/*ger
zeppelin
5

Shell Android, 9 bytes

reboot -p
Pedro Lobito
fonte
7
Bem-vindo ao PPCG!
ETHproductions
5

AppleScript, 44 bytes

tell application "Finder"
shut down
end tell

Não sei como funciona a sintaxe do AppleScript ou algo assim; portanto, se alguém souber como diminuir isso, informe.

Além disso, estou fazendo isso no meu telefone da escola ("hacking"), para não poder testá-lo.

Com menos 14 bytes (graças a kindall), você pode dizer

tell app "Finder" to shut down
Daniel
fonte
Alguém veio com uma solução mais curta (com o mesmo programa) algumas horas depois que você (mas postou-lo em vez de comentar aqui) codegolf.stackexchange.com/a/107958/62824
devRicher
Provavelmente você pode remover o recuo
Cyoce
4
tell app "Finder" to shut downdeve funcionar, acredito (embora a compilação possa substituir 'app' por 'application').
Kindall
4

J, 14 bytes

2!:0'poweroff'

Funciona em sistemas Linux. 2!:0executa a string em /bin/sh.

milhas
fonte
4

Clojure, 40 39 bytes

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

-1 byte, alterando o sinalizador de -spara/s , o que me permitiu livrar-me do espaço.

Basicamente, a resposta do Java.

Testar isso foi divertido. O Windows decidiu fazer uma atualização de firmware no meu Surface assim que ele foi desligado. Claro.

(defn shutdown []
  (.exec (Runtime/getRuntime) "shutdown -s"))
Carcinigenicado
fonte
2

Node.js, 39 bytes

Linux

require('child_process').exec('init 0')
Tom
fonte
2

AHK, 19 15 bytes

Run,Shutdown -s

Funciona apenas no Windows.

Gurupad Mamadapur
fonte
2

C ++, 48 47 (Windows) 46 45 (Linux) bytes

Removido 1 byte graças ao Snowman

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

Isso deve desligar o sistema para Windows

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

Isso deve desligar o sistema para Linux

fəˈnɛtɪk
fonte
você precisa do ;?
RaisingAgent 24/01
1
@LliwTelracs Tenho certeza de que é "shutdown / p" e não "-p" e o espaço não é necessário.
P. Ktinos
O ponto-e-vírgula é necessário para a sintaxe apropriada do c ++, o uso de uma barra permite uma resposta mais curta para o Windows, mas faz com que não funcione mais no Linux. Embora eu tenha adicionado o caractere errado para o desligamento que é compartilhado entre o Windows e o Linux
#
@LliwTelracs Embora você possa fazer o que quiser, sugiro abusar da 2ª regra e não se importar com a funcionalidade do Linux, já que este é um código-golf e menor quantidade de bytes é melhor.
P. Ktinos
1
#include<cstdlib>irá cortar um byte.