Código que será executado apenas uma vez


223

Objetivo

O objetivo deste desafio é escrever um código que será executado uma vez e apenas uma vez. Isso significa basicamente que danifica o programa, script ou ambiente de alguma forma. Se reiniciar, o sistema permitirá que o código seja executado novamente, o que é permitido.

Pontuação

Número de votos. Todas as premissas devem estar claramente listadas. Quaisquer respostas que acabem de iniciar uma reinicialização ou parada serão desqualificadas.

Regras adicionais porque Greg Hewgill é um semideus

Nenhum acesso root é permitido.

Data final

O concurso será encerrado em 31 de maio de 2014.

Editar

Este concurso foi alterado para concurso de popularidade.


7
A @PeterTaylor, uma possível solução, seria a exclusão automática, mas como o resultado está mostrando, não é a única.
Lukei 28/05

101
Para muitas pessoas que ligam viem um único ambiente de terminal tem esse efeito, não há escapatória, a menos que você reinicie :) Apenas uma piada aqui.
orion 28/05

6
O site é gratuito para você propor essa pergunta.
Ojblass

16
echo "If you try to execute me again, it means you are an idiot.";<- Ninguém executará mais de uma vez: P
user3459110 05/05

25
O software relacionado a mísseis se qualificaria? ;)
rsegal

Respostas:


518

Vigília

Finalmente, um caso de uso para o Vigil!

def main():
  raise Exception()

Trecho da "especificação da linguagem":

Escusado será dizer que qualquer função que lança uma exceção que não é capturada está errada e deve ser punida.

...

Se um juramento for quebrado, a função ofensiva [...] será devidamente punida.

Quão?

Simples: será excluído do seu código fonte.

A única maneira de garantir que seu programa atenda aos requisitos para proibir absolutamente o código que não o faz. Com o Vigil, ele fará isso por você automaticamente.

Existem outras maneiras de fazer isso, porque o Vigil fornece as palavras-chave imploree swearque são basicamente juramentos de adesão a determinadas condições pré e pós:

def main():
  swear 0 > 1

116
Sem dúvida, isso merece ganhar.
Matteo Italia

77
Finalmente, uma linguagem suficientemente vigilante para a era moderna! Vou começar a usá-lo na produção. Todos os erros devem ser eliminados.
Claudiu 28/05

13
Para mim, parece que não é necessariamente a falha da função que gera uma exceção não capturada, também pode ser que as funções na pilha de chamadas sejam negligentes por não conseguirem capturá-la. Pode até sugerir que a arquitetura de todo o aplicativo é falha (porque talvez não haja maneira de lidar adequadamente com essa exceção sem reestruturar o código?) Em resumo, todo o programa deve ser excluído.
Jonathan Pullano 28/05


32
Pontos adicionais para xingar. Um programa que faz uma declaração falsa e confiante, sem dúvida, precisa ser eliminado.
orion 28/05

293

Praticamente qualquer distribuição Linux, 9 caracteres

Este é um clássico!

#!/bin/rm

Coloque isso em um arquivo e execute-o:

> ed
a
#!/bin/rm
.
wq foo
> ls
Mail mbox foo
> chmod 777 foo
> ./foo
> ls
Mail mbox

Aaand se foi!

Quanto ao que está acontecendo: eu realmente estou apenas correndo rm! #!é chamado de shebang . E se você colocar um desses itens seguido por um caminho para algum executável como a primeira linha do seu script, o carregador do programa executará seu arquivo de script com o que você escreveu lá - o padrão é geralmente #!/bin/bashou #!/bin/sh(Bourne-again shell / Bourne shell) . O primeiro argumento passado para esse script será o próprio nome do arquivo (é por isso que você vê tantas soluções, incluindo %0or $0e gostos aqui); portanto, fazendo com que meu arquivo contenha #!/bin/rme execute, tudo o que estou fazendo é passar o nome do arquivo para rm.


9
Sem nunca ter usado o Linux, acho que ele exclui o arquivo de script.
Οurous

56
@NateKerkhofs, a #!sequência inicia um shebang, que identifica qual intérprete você usará para o script - normalmente /bin/bash. Aqui, Flonk usou /bin/rmcomo "intérprete". rmé um programa que apaga arquivos. porque o Linux pensa que queremos rmser um intérprete, ele passa o nome do arquivo como argumento. portanto, o arquivo se exclui

19
Isso é histérico #
ojblass

25
@ user80551 Não preciso de acesso root para isso.
Flonk 28/05

9
hmm ..../foo mbox
Izkata 28/05

241

binário x86, 4 bytes

F0 0F C7 C8

Suposição: deve ser executado em uma CPU Pentium P5.

A instrução acima é comumente conhecida como bug F00F . Ele tenta executar uma instrução inválida, prefixada com lock .

Isso congela a CPU completamente (nem uma parada nem uma reinicialização) e nem sequer requer acesso root.


4
Uau ... isso é realmente interessante.
ojblass

31
@JackM: Sim, mas isso é explicitamente permitido na pergunta.
Dennis

34
@ JackM, essa parece ser uma ótima maneira de interromper a execução do "script".
Paul Draper

5
Lembro-me de quando esse bug estava circulando. Uma solução alternativa do kernelside foi encontrada quase imediatamente - não travará o computador, a menos que você esteja executando um sistema operacional sem o patch.
Zwol

3
@RosLuP 209 usuários diferentes, aparentemente. Se você não concordar, faça voto negativo e siga em frente.
Dennis

150

Bash, 5

>"$0"

Trunca-se no comprimento zero.

Se o nome do arquivo não contiver espaços, >$0funcionará por 3 caracteres !


2
Na verdade, as aspas nunca são necessárias para uma variável usada em um nome de arquivo redirecionado como este, mesmo se o programa ou caminho para o programa contiver espaços, devido a um caso especial nas regras de análise de shell. Então você sempre pode fazer isso em 3 caracteres!
Apenwarr

3
@apenwarr diz "$ 0: redirecionamento ambígua" quando sem aspas e o nome do arquivo contém espaços

11
@apenwarr, é necessário se o shell que interpreta esse script for baseado no ksh88 ou se o bash não estiver no modo posix. Não se trata de espaço, trata-se de qualquer caractere $IFSpara caracteres bash e curinga para bash e ksh88. Um script she-bang less geralmente será interpretado pelo sh do sistema, mas alguns shells, incluindo bash e ksh88, os interpretarão em um filho deles.
SCH

144

gzip

#!/bin/gzip

Para muito aborrecimento às pessoas acostumadas a ferramentas de linha de comando não destrutivas, gzippor padrão, arruina o arquivo original, substituindo-o por uma versão compactada em gzip (adicionando um sufixo).

Essa é uma variação da #!/bin/rmopção, exceto que esta é recuperável por intervenção humana manual (solicite gunzip). Como um bônus especial, o arquivo resultante é muito maior que o original (a diferença depende do tamanho do nome do arquivo).

Aviso: a localização de gzippode variar.

EDIT: como apontado pelo WChargin, este é mais portátil:

#!/usr/bin/env gzip

O restante do arquivo pode ter qualquer conteúdo. É essencialmente um arquivo que, quando chamado, se esconde em uma caixa e se recusa a sair até que você o descompacte à força.


7
Eu nunca pensei nisso antes, mas você está absolutamente correto.
ojblass

muito interessante
Grijesh Chauhan

11
"Aviso: a localização de gzippode variar" - isso não é código-golfe , então você pode usar#!/usr/bin/env gzip
wchargin

37
+1 apenas para It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.Você fez o meu dia, e é 01:00.
clap

É essencialmente um arquivo que, quando chamado, se esconde em uma caixa e se recusa a sair até que você o descompacte à força. me fez rir. : D
Mischa

121

Bash, 13 12

Não é o mais curto, mas na verdade não exclui o arquivo nem torna o sistema inutilizável.

chmod 0 "$0"

Se o nome do arquivo não contiver espaços, você poderá remover as aspas para salvar 2 caracteres.

Explicação

Ele remove todas as permissões ( rwx) de si mesmo. Quando você tenta executá-lo ou até mesmo exibir seu código uma segunda vez, sem restaurar manualmente as permissões, ele diz algo como

bash: <FILENAME>: Permission denied

Restaure as permissões com

chmod +rwx <FILENAME>

Versão antiga

Remove apenas as permissões de execução, mas um caractere a mais (essa era uma pergunta sobre antes de ser alterada para ):

chmod -x "$0"

Versão sorrateira de Łukasz Niemier

#!/bin/chmod 0

4
chmod 0funciona muito
gnibbler

@gnibbler thnx, adicionado

Eu acho que você pode chamar o programa ae salvar ainda três caracteres:chmod 0 a
yo '

@tohecz que é basicamente enganando embora

5
Ainda melhor#!/bin/chmod 0
Hauleth

112

6800 código de máquina - 1 byte

0xDD

Isso é conhecido como HCF ou Halt and Catch Fire


78
Bem, as regras dizem "Quaisquer respostas que apenas iniciem uma reinicialização ou parada serão desqualificadas", mas isso não inicia apenas uma parada, porque também pega fogo. Assim, +1!
precisa saber é o seguinte

94

Shell + sed, 16 bytes

Não é tão destrutivo quanto algumas das outras respostas ;-)

Este script insere um comentário #no início de cada linha:

sed -i s/^/#/ $0

3
Que tal sed -i g $0?
seshoumara

91

Commodore 64 BASIC

Este não exclui o programa.

1 POKE 2048,1

Auto-destruição

De acordo com o mapa de memória do Commodore 64 , o endereço 2048não é utilizado, mas deve conter um valor igual 0para que o programa BASIC possa ser EXECUTADO.


11
O puxão simplesmente move uma variável para um local?
Ojblass 29/05

12
@ojblass sim, efetivamente. poke a, bé equivalente ao código C *((unsigned char *)a) = b;.
Jules

4
Eu gostaria de visualizar meus cutucões do FaceBook dessa maneira!
Sunny R Gupta

3
Oh uau ... Lembro-me de PEEK e POKE do C64 BASIC! Eu estava escrevendo essas coisas por volta de 1977.
Fixee

nota lateral: Um 0byte é usado para marcar o final das linhas de código; portanto, o endereço 0x800 provavelmente precisa de um para marcar o início da primeira linha de código.
Titus


68

Python, 18

open(__file__,'w')

Trunca o arquivo, abrindo-o no modo somente gravação.


14
Caso você esteja falando sério, ele se abre ( __file__refere-se ao seu próprio nome de arquivo). A abertura no wmodo trunca o arquivo, basicamente o limpa.
29414 Bob

7
Acho que o truncamento acontece em aberto, mas independentemente do tempo de execução do Python deve liberar todos os arquivos abertos no final do programa, e o Python ou o SO os fechará quando o processo terminar. é claro, geralmente é uma boa prática fechar explicitamente identificadores abertos quando você terminar com eles.
29414 Bob

5
A maneira "certa" de lidar com arquivos no Python é com ... er, com. with open("myfile.txt","r") as thefile:e seu código de manipulação de arquivos fechará automaticamente o arquivo quando você terminar.
315 Schilcote

11
Isso pode ser reduzido para algo como open("f.py","w").
Ethan Bierlein

11
Não deixa de trabalhar .pyc whrn permanece
minmaxavg

66

Lote: 5 bytes

%0|%0

É basicamente o forkbomb para Windows.

O aplicativo inicia seu primeiro argumento duas vezes. Não execute em um ambiente produtivo;)


83
Existe um ambiente produtivo para janelas? (Estou brincando, é claro).
orion 28/05

17
parece tão inocente!
ojblass

15
Ok, definitivamente não tente isso. Não foi bem.
precisa saber é o seguinte

75
Não tenha o representante para voto negativo, mas ele viola "executa apenas uma vez" da maneira mais grave possível.
Xan

14
Eu acredito que um humano o executa apenas uma vez e se qualifica.
ojblass

54

Javascript

localStorage.x = eval(localStorage.x + localStorage.x)

A primeira vez que você executá-lo, funcionará bem:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
NaN

Se você tentar executá-lo mais (mesmo se atualizar), receberá um erro:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
ReferenceError: NaNNaN is not defined

5
Então, se você executá-lo várias vezes, obtém o tema Batman. +1 para isso.
Hankrecords

2
@Hankrecords Infelizmente, não realmente, uma vez que este não é vai executar mais tarde ...
RedClover

@Soaku Bummer ...
Hankrecords

@Hankrecords menos que você remova eval, mas então ele não vai cumprir este desafio
RedClover

46

O sistema operacional CMS da IBM, que é um sistema operacional de usuário único que é executado como convidado no VM Hypervisor da IBM, possui uma estrutura de arquivos interessante.

Os arquivos consistem em três elementos, Nome do arquivo, Tipo de arquivo e Modo de arquivo. O modo de arquivo consiste em dois elementos, um único alfabético, que, para facilitar a explicação, pode ser considerado de maneira semelhante à letra da unidade para Windows / MS-DOS e um único dígito numérico.

O dígito numérico único possui um significado, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , e para esta tarefa é o número 3 que é interessante:

Número
do modo de arquivo 3 O número do modo de arquivo 3 significa que os arquivos são apagados após serem lidos. Você pode usar o modo de arquivo número 3 se não desejar manter cópias nos minidiscos ou nos diretórios do SFS.

Portanto, passe horas escrevendo seu script e arquive-o como `LOST FOREVER A3 '. Execute-o, ele funciona pela primeira vez. Partiu para casa, trabalho bem feito.

Observe que nenhuma mensagem é produzida indicando a exclusão. Afinal, todo mundo sabe o que isso 3significa, não é?

Na verdade, é realmente muito útil. Depois que o teste estiver concluído, você poderá usar os 3arquivos temporários e não precisar limpá-los posteriormente, porque são arquivos de leitura única.


44

Commodore 64 BASIC

0 NEW

NEW exclui o programa.


11
O que isso faz?
Darth Egregious

3
@ user973810 se bem me lembro básico, novo é para a limpeza de memória, por isso vai apagar o programa
user902383

3
Agradável. Não específico do Commodore 64, provavelmente funciona como em quase todas as máquinas BASIC de 8 bits dos anos 80 ...
ysap

Você pode OLD ou O. de volta também. Eu tinha 12 meses de gênio em codificação de jogos de 12 meses; p trabalhei por acidente uma vez. Em seguida, salvo acidentalmente, em vez de antigo. O. não funcionavam mais :( Eu fiz aprender editores hexadecimais funcionou muito sharpish embora :)
Matt Warren

3
@ syap: seria mais portátil se estivesse usando 1 como número de linha; nem todas as implementações básicos suportados número da linha 0.
celtschk

41

Bash, 12

Nota: Isso é destrutivo.

:(){ :|:&};:

É o popular bash fork-pump. Ele consome exponencialmente toda a memória e o PID está bloqueando o sistema. Uma reinicialização forçada permitirá que o código seja executado novamente. Por que você deseja fazer isso?


Bash, 10

:(){ :&};:

Por dois caracteres a menos, isso consome sua memória linearmente.


Bash, 7

w;PATH=

w é escolhido como o menor executável em que eu conseguia pensar.

Isso simplesmente apaga a variável path, para que o shell não encontre /usr/bin/wda próxima vez. Reiniciar o shell o corrige, pois o caminho geralmente é armazenado em~/.profile


Droga: DI apenas teve a mesma idéia: P
Knerd 28/05

11
:(){ :&};:não deve comer sua memória. Para assim que for bifurcada, só há sempre O(1)ativo. Você já fez while(fork());, o que consumiria sua memória linearmente é o equivalente fork(); while(1);.
Marinus 28/05

26
Uau! essas são algumas emoticons mortais! É melhor eu não chamar meu computador de cara de carranca com o nome :(){ ... #
Level River St

11
Se bem me lembro ... a bomba dos garfos periodicamente deixa um PID aberto. O script pode ser executado novamente nesse intervalo ... e se isso não contar, é possível matar todos os garfos com algum esforço. Reiniciar é simplesmente a solução mais fácil.
Brilliand

11
Eu não acho que isso se qualifique. Não torna impossível a execução do script novamente, mas garante que ele seja executado novamente (muitas vezes).
Ben Voigt

20

C #

Código mais curto para excluir a si próprio

Process.Start(new ProcessStartInfo("cmd.exe", "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location + "\""));

Código para torná-lo imperceptível na interface do usuário

Process.Start( new ProcessStartInfo()
{
    Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location+"\"",
    WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, FileName = "cmd.exe"
});

7
Por fim, uma resposta em C #!
Pharap

Por que a escolha é necessária?
Wizzwizz4

19

C ++ 71

O arquivo executável "golf" não tem permissão para executar na próxima vez.

#include <stdlib.h>
int main()
{
system("chmod a-x golf");
return 0;
}

JavaScript / HTML 137, 145 com teste do console

<script id="s"> 
function h(){
console.log(1);
var s=document.getElementById("s");
h=s.innerHTML;
h=h.replace("h","g");
s.innerHTML=h;
}

11
@Templar no contexto do JavaScript, eu acho que refrescando as contagens de páginas como reiniciar (talvez?)

2
Mesmo se você não estivesse removendo o script da página, ele ainda seria executado apenas uma vez. Não há razão para isso.
Ndscore # 28/14

2
@nderscore Parece que a função h é o que será executada apenas uma vez. Você precisa chamá-lo de outro lugar (análogo à execução de um programa, eu acho). Diga <button onclick="h();">,.
Bob

4
Como o carregamento da página é permitido, e seu objetivo é impedir que h seja executável mais de uma vez enquanto já estiver carregado, o que há de errado function h(){h=0}?
Aproximando

11
Com #include <sys/stat.h>você, você pode acessar chmoddiretamente a função, economizando alguns bytes ( <stdlib.h>não é mais necessário e nem é system). Além disso, não returné necessário.
Ben Voigt

19

Shell do meu nome ... PowerShell

Mensagem autodestrutiva clássica:

@'
##################################
Project X is a go

Meet Eagle 1 at WP Alpha

Further comms is hereby prohibited
##################################
This message will self destruct in 
5 seconds
'@
5..1| %{$_;Sleep 1;}
"Goodbye"
rm $(.{$MyInvocation.ScriptName})

Explicação, por favor?
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ Linhas até 13 são apenas bobagens. Depois disso, como qualquer outro shell, o PowerShell carrega o script em execução na memória e, portanto, ele não precisa mais do arquivo de script original ... e se exclui.
SomeShinyObject

18

Bash (5)

rm $0

Supondo que você não tenha espaços no nome do arquivo.


40
É por isso que o Unix é melhor que o Windows: rm, em vez de del, economizou um byte.
MadTux 10/06

11
@ MadTux Eu prefiro * nix ao Unix.
Wizzwizz4

14

sh

#!/bin/sh
curl http://runonce.herokuapp.com/

Será executado apenas uma vez (e mostra "Olá, mundo!", Se for executado), mesmo se você reinstalar o sistema e colocar o script novamente.


Edição: Eu imaginei que iria lançar um script por trás de runonce também. Nada de especial, pois não deveria ser lançado de qualquer maneira, mas tanto faz.

<?php
$db = pg_connect("[connection information]");
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];

pg_query("DELETE FROM users WHERE time < now() - interval '1 day'");

$result = pg_query_params($db, "SELECT * FROM users WHERE ip = $1 LIMIT 1", array($ip));

if (!pg_fetch_row($result)) {
    echo "Hello, world!\n";
    pg_query_params($db, "INSERT INTO users (ip) VALUES ($1)", array($ip));
}

Bem como o esquema do banco de dados

CREATE TABLE users (
    ip inet PRIMARY KEY,
    time timestamp with time zone NOT NULL DEFAULT now()
);
CREATE INDEX ON users (time);

Os dados são armazenados no banco de dados do Heroku, fique à vontade para verificar a política de privacidade deles, se quiser. Não verifico os dados armazenados em um banco de dados, eles são armazenados apenas para permitir que o código seja executado uma vez.


4
Eu diria que isso será executado várias vezes, apenas não produz saída após o primeiro.
Brilliand

5
Isso nem sequer mostrou "Olá Mundo" para mim.
Paŭlo Ebermann

11
@ StéphaneGourichon: Sim, ele lembra de IPs e não há como remover um IP antes da remoção automática. Decidi colocar o código fonte, para que você possa verificar o que ele faz.
precisa saber é o seguinte

11
@ StéphaneGourichon: pg_query_paramspraticamente protege contra injeção de SQL. No entanto, ele não será salvo, pois '; DROP TABLE users;--não é um IP válido ( inetapenas aceita IPs) e, portanto, se você tiver um X-Forwarded-Forcabeçalho falso , sua visita não será salva. Eu não considero isso um problema.
precisa saber é o seguinte

2
Acredito que isso seja uma violação de uma brecha padrão: terceirizar a resposta real .
precisa saber é o seguinte

12

PHP, 22 20 caracteres

<?=unlink(__FILE__);

EDIT: Removidos dois caracteres no final por comentários.


2
Isso pode ser simplificado ainda mais como <?unlink(__FILE__);?>
:,

Você precisa começar <?=ou a tag de início não é reconhecida.
Michael Mior

2
PHP se destruindo ... ha! E_NOTICE line 3048
metadings

<?+ espaço também está ok. Você simplesmente não pode usar uma letra após a marca curta.
Titus

11

Ruby, 14

Ele reescreve o código fonte como o nome do programa.

IO.write $0,$0

3
E se o programa for chamado "IO.write $ 0, $ 0"? "Suposição: Nomeie o programa como algo que não é um código válido em nenhum idioma."
Brilliand

@Brilland, um programa ruby ​​deve sempre terminar com .rbe mesmo se seu nome for "IO.write $ 0, $ 0 # .rb" que não funcione, porque, ao ser escrito, incluirá o caminho completo.
Mhmd

3
@Mhmd, um programa ruby ​​pode terminar com qualquer coisa. Por exemplo, geme irbsão programas Ruby sem extensão.
bfontaine

@bfontaine Que tem shebangs. Isso não acontece.
Wizzwizz4

@ wizzwizz4 Shebangs não tem nada a ver com a extensão. ruby fooe ruby foo.rbfuncionará da mesma forma com ou sem um shebang. ./fooe ./foo.rb(supondo que sejam executáveis) falhará sem shebang e obterá sucesso com ele (assumindo o código correto, etc.).
Bfontaine

10

Lote (6 caracteres)

Isso pressupõe que temos permissão para excluir o arquivo e, é claro, isso pode ser feito no Windows (talvez também no MS-DOS).

del %0

10

Bash 9 8 Personagens

nc -l 1&

Só será executado uma vez, porque a porta está bloqueada para sempre.


11
Eu acho que isso não funciona, porque 0é uma porta especial (é reservada). Quando executo isso no meu computador, posso abri-lo várias vezes. Além disso, é uma porta < 1024, o que significa que requer que o acesso root seja ouvido.
heinrich5991

nc -l 1&resolveria o problema 0e seria um byte mais curto, pois o último espaço não é necessário.
kasperd

@kasperd Obrigado pela entrada :-)
Falco

@ ok heinrich5991 - do que eu precisaria de 11 caracteres sem acesso root para usar uma porta como 9654
Falco

Importa-se de explicar por que você votou mal?
Falco

9

NodeJS - 33 bytes

require('fs').unlink(__filename);

Você poderia descrever o que isso faz para aqueles que não estão familiarizados com o idioma?
Kyle Kanos

11
@KyleKanos Ele pega o módulo do sistema de arquivos fse o nome do arquivo atual __filenamee remove esse nome do sistema de arquivos.
Aproximando

7
Você pode excluir o ponto-e-vírgula porque eles são opcionais em JavaScript.
nalply

8

Lote, 7 caracteres

Salve o trabalho não salvo antes de tentar isso.

Supõe um sistema de 64 bits ou um sistema de 32 bits com <2 GB de memória RAM. Deve ser salvo em um arquivo .bat ou .cmd antes de ser iniciado, apenas inseri-lo no cmd.exe não funcionará.

^ nul<^

Consome um núcleo de CPU completo e preenche sua memória RAM a uma taxa de várias centenas de megabytes por segundo. Se você não parar a tempo (o Gerenciador de Tarefas), ele consumirá todos os bytes de RAM do seu computador, todo o sistema congelará e você não poderá fazer nada antes de desligar e reiniciar o computador à força, cortando energia ou mantendo o botão liga / desliga pressionado.

Todos os créditos vão para txtechhelp no StackOverflow para isso, veja mais informações aqui: https://stackoverflow.com/q/23284131/1955334


Como isso seria possível? E a paginação? Prioridade do processo?
Nicolas Barbulesco

Eu corri esse script, nada aconteceu.
Pavel

@ Pavel Eu acho que é corrigido no Windows 10 então. Não consigo reproduzi-lo no Windows 10, mas funciona no Windows 8.1.
bilde2910

11
"Consome um núcleo de CPU completo e preenche sua memória RAM a uma taxa de várias centenas de megabytes por segundo. Se você não parar a tempo (Gerenciador de Tarefas), consumirá cada byte de RAM do seu computador, todo o sistema congelará e você não poderá fazer nada antes de desligar e reiniciar o computador à força, cortando a energia ou mantendo o botão liga / desliga pressionado. " Soa como uma história de horror para computadores ... #
31416

7

Aqui estão algumas. Ao contrário de muitos, estes não são destrutivos, apenas criativos e pouco ortodoxos.

Bater

#!/usr/bin/env bash
read <<< ''
printf "$REPLY" > "$0"

Essa é bem simples. A variável $REPLYé criada implicitamente por read, mas preenchida com uma sequência vazia. Essa string vazia é então printfinserida no script atual. É um equivalente bastante ofuscado do seguinte:

#!/usr/bin/env bash
cat <<< '' > "$0" # probably a lot more portable

Lote do Windows

copy con %0 < nul

O segundo basicamente copia a entrada do console, de leitura nul, para o arquivo atual.


Enviada após este tornou-se um concurso de popularidade
Isiah Meadows

11
O primeiro não funcionará sem permissões de root. Por que você está tentando substituir o dispositivo nulo? Quando executado como root, isso realmente faria o sistema se comportar de maneira irregular. Você também está substituindo o nulo enquanto escreve nele :) Por que não movê-lo para outro lugar? Como mv "$ 0" "$ {0} x" ou algo assim? Deveria fazer o truque.
orion 30/05

O arquivo ainda existe depois?
Isiah Meadows

Agora mudei completamente o exemplo do Bash.
Isiah Meadows

Como isso não é destrutivo?
ysap

7

Sinclair BASIC

10 POKE 23635,255

Move o endereço do programa BASIC na memória para fora de onde deveria estar (203) para que os dados incorretos sejam encontrados pelo intérprete.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.