Код, который будет выполняться только один раз


223

Цель

Цель этой задачи - написать код, который будет выполняться один раз и только один раз. В основном это означает, что это каким-то образом повреждает программу, скрипт или среду. Если перезагрузка системы позволяет коду выполнить снова, что разрешено.

счет

Количество голосов. Все предположения должны быть четко указаны. Любые ответы, только инициирующие перезагрузку или остановку, будут дисквалифицированы.

Дополнительные правила, потому что Грег Хьюгилл полубог

Корневой доступ не разрешен.

Дата окончания

Конкурс закроется 31 мая 2014 года.

редактировать

Этот конкурс был изменен на конкурс популярности.


7
@PeterTaylor возможным решением было бы самоудаление, но, как показывает результат, оно не единственное.
Луки

101
Для многих людей, звонящих viв одной терминальной среде, этот эффект не избежать, если вы не перезагрузитесь :) Просто шутка.
Орион

6
Сайт свободен для вас, чтобы предложить такой вопрос.
ojblass

16
echo "If you try to execute me again, it means you are an idiot.";<- Никто не выполнит более одного раза: P
user3459110

25
Будет ли программное обеспечение, связанное с ракетами, квалифицировано? ;)
rsegal

Ответы:


518

бдение

Наконец-то использование Vigil!

def main():
  raise Exception()

Выдержка из «спецификации языка»:

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

...

Если клятва нарушена, нарушитель [...] будет должным образом наказан.

Как?

Просто: он будет удален из вашего исходного кода.

Единственный способ гарантировать, что ваша программа соответствует ее требованиям, - это абсолютно запретить код, который этого не делает. С Vigil он сделает это автоматически.

Есть и другие способы сделать это, потому что Vigil предоставляет ключевые слова imploreи swearкоторые в основном являются клятвами придерживаться определенных предварительных и постусловий:

def main():
  swear 0 > 1

116
Без сомнения, это заслуживает победы.
Маттео Италия

77
Наконец, достаточно бдительный язык для современной эпохи! Я собираюсь начать использовать его в производстве. Все ошибки должны быть удалены.
Клаудиу

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


32
Дополнительные баллы за ругань. Программа, которая делает уверенное ложное утверждение, без сомнения, должна быть устранена.
Орион

293

Практически любой дистрибутив Linux, 9 символов

Это классика!

#!/bin/rm

Поместите это в файл и запустите:

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

Ааа это прошло!

Что касается того, что происходит: я действительно просто бегаю rm! #!называется притоном . И если вы поместите один из них, а затем путь к некоторому исполняемому файлу в качестве первой строки в вашем скрипте, загрузчик программы выполнит ваш файл скрипта с тем, что вы там написали - по умолчанию это обычно #!/bin/bashили #!/bin/sh(оболочка Bourne-again / оболочка Bourne) , Первым аргументом, передаваемым этому сценарию, будет само имя файла (вот почему вы видите так много решений, в том числе %0или $0и тому подобное); поэтому, заставляя мой файл содержать #!/bin/rmи запускать все, что я делаю, передаю имя файла моего файла rm.


9
Я никогда не использовал Linux, я думаю , что он удаляет файл сценария.
Οurous

56
@NateKerkhofs #!последовательность запускает шебанг , который определяет, какой интерпретатор вы собираетесь использовать для сценария - обычно /bin/bash. Здесь Флонк использовал /bin/rmв качестве «переводчика». rmэто программа, которая удаляет файлы поскольку Linux считает, что мы хотим rmбыть интерпретатором, она передает имя файла в качестве аргумента. следовательно, файл удаляется сам

19
Это истерика
ojblass

25
@ user80551 Мне не нужен root-доступ для этого.
Флонк

9
хм ..../foo mbox
Изката

241

двоичный файл x86, 4 байта

F0 0F C7 C8

Предположение: должен быть запущен на процессоре P5 Pentium.

Приведенная выше инструкция широко известна как ошибка F00F . Он пытается выполнить недопустимую инструкцию с префиксом блокировки .

Это полностью замораживает процессор (не останавливается и не перезагружается), и даже не требует root-доступа.


4
Вау ... это действительно интересно.
ojblass

31
@JackM: Да, но это явно разрешено в вопросе.
Деннис,

34
@JackM, это отличный способ остановить запуск «скрипта».
Пол Дрейпер

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

3
@RosLuP 209 разных пользователей, по-видимому. Если вы не согласны, понизьте голос и двигайтесь дальше.
Деннис

150

Баш, 5

>"$0"

Усекает себя до нулевой длины.

Если имя файла не содержит пробелов, >$0работает для 3 символов !


2
На самом деле, кавычки никогда не нужны для переменной, используемой в имени файла перенаправления, подобном этому, даже если программа или путь к программе содержат пробелы из-за особого случая в правилах синтаксического анализа оболочки. Так что вы всегда можете сделать это за 3 символа!
apenwarr

3
@apenwarr говорит «$ 0: неоднозначное перенаправление», когда без кавычек и имя файла содержит пробелы

1
@apenwarr, это необходимо, если оболочка, которая интерпретирует этот скрипт, основана на ksh88 или bash не в режиме posix. Речь идет не о $IFSпробелах, а о любых символах bash и подстановочных знаках для bash и ksh88. Скрипт без побега обычно интерпретируется системным sh, но некоторые оболочки, включая bash и ksh88, вместо этого будут интерпретировать их как дочерние.
щ

144

GZIP

#!/bin/gzip

К большому раздражению людей, привыкших к неразрушающим инструментам командной строки, gzipпо умолчанию портится оригинальный файл, заменяя его версией gzip (добавляя суффикс).

Это вариант #!/bin/rmварианта, за исключением того, что его можно восстановить с помощью ручного вмешательства человека (позвоните gunzipпо нему). В качестве специального бонуса, полученный файл намного длиннее исходного (разница зависит от длины имени файла).

Предупреждение: расположение gzipможет отличаться.

РЕДАКТИРОВАТЬ: как указал WChargin, это более переносимо:

#!/usr/bin/env gzip

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


7
Я никогда не думал об этом раньше, но вы абсолютно правы.
ojblass

очень интересно
Grijesh Chauhan

11
«Предупреждение: расположение gzipможет отличаться» - это не код-гольф , поэтому вы можете использовать#!/usr/bin/env gzip
wchargin

37
+1 только потому, что It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.Ты сделал мой день, а сейчас 1 час ночи.
хлопай

По сути, это файл, который при вызове прячется в коробке и отказывается открываться, пока вы его не распакуете. заставил меня смеяться : D
Миша

121

Баш, 13 12

Не самый короткий, но на самом деле он не удаляет файл и не делает систему непригодной для использования.

chmod 0 "$0"

Если имя файла не содержит пробелов, вы можете удалить кавычки, чтобы сохранить 2 символа.

объяснение

Он удаляет все разрешения ( rwx) от себя. Когда вы попытаетесь запустить его или даже просмотреть его код во второй раз, не восстанавливая разрешения вручную, он скажет что-то вроде

bash: <FILENAME>: Permission denied

Восстановите разрешения с

chmod +rwx <FILENAME>

Старая версия

Только удаляет разрешения на выполнение, но на один символ длиннее (это был вопрос прежде чем он был изменен на ):

chmod -x "$0"

Подлая версия Лукаша Нимье

#!/bin/chmod 0

4
chmod 0тоже работает
gnibbler

@gnibbler thnx, добавлено

Я думаю, что вы можете вызвать программу aи сохранить еще 3 символа:chmod 0 a
yo '

@tohecz это в основном обманывает

5
Еще приятнее#!/bin/chmod 0
Hauleth

112

6800 машинный код - 1 байт

0xDD

Это известно как HCF или остановка и загорание


78
Ну, правила гласят: «Любые ответы, просто инициирующие перезагрузку или остановку, будут дисквалифицированы», но это не только инициирует остановку, потому что она также загорается. Таким образом, +1!
Трейказ

94

Shell + sed, 16 байт

Не так разрушительно, как некоторые другие ответы ;-)

Этот скрипт вставляет комментарий #в начале каждой строки:

sed -i s/^/#/ $0

3
Как насчет sed -i g $0?
сесумара

91

Коммодор 64 Бейсик

Этот не удаляет программу.

1 POKE 2048,1

Саморазрушение

Согласно карте памяти Commodore 64 , адрес 2048не используется, но он должен содержать значение, 0чтобы BASIC-программа могла быть запущена.


1
Poke просто перемещает переменную в локацию?
ojblass

12
@ojblass да, эффективно. poke a, bэквивалентно кода C *((unsigned char *)a) = b;.
Жюль

4
Я хотел бы визуализировать мои тыквы FaceBook таким образом!
Солнечный R Гупта

3
Ух ты ... Я помню ПИК и ПИК из C64 BASIC! Я писал этот материал около 1977 года.
Fixee

примечание стороны: 0Байт используется, чтобы отметить конец строк кода; так что адресу 0x800, вероятно, нужен один, чтобы отметить начало первой строки кода.
Титус

89

Предположение: работает Solaris, вошел как root

killall

3
Солярис действительно есть такая вещь?
ojblass

21
Да, он делает то, что говорит на жестяной банке, и убивает все запущенные процессы.
Грег Хьюгилл

один голос за тебя!
ojblass

9
1. В вопросе упоминается, что корневой доступ не разрешен.
user80551

119
@ user80551 он причина для этого правила.
Сейрия

68

Python, 18

open(__file__,'w')

Обрезает файл, открывая его в режиме только для записи.


14
На всякий случай, если вы серьезно, он открывает себя ( __file__ссылается на свое имя файла). Открытие в wрежиме обрезает файл, в основном очищает его.
Боб

7
Я думаю, что усечение происходит при открытии, но независимо от времени выполнения Python должен сбрасывать все открытые файлы в конце программы, и Python или ОС закроют их, когда процесс завершится. Конечно, обычно хорошей практикой является явное закрытие открытых дескрипторов, когда вы закончите с ними.
Боб

5
«Правильный» способ обработки файлов в Python - это ... э, с. with open("myfile.txt","r") as thefile:и тогда ваш код обработки файлов автоматически закроет файл, когда вы закончите.
Schilcote

1
Это может быть сокращено до чего-то вроде open("f.py","w").
Итан Бирляйн

1
Не перестает работать, когда остается .pyc
minmaxavg

66

Пакет: 5 байт

%0|%0

Это в основном вилка для Windows.

Приложение начинает свой первый аргумент дважды. Не запускайте его в продуктивной среде;)


83
Есть ли продуктивная среда для окон? (Шучу конечно).
Орион

17
это выглядит так невинно!
ojblass

15
Хорошо, определенно не пытайтесь это сделать. Это не прошло хорошо.
rmobis

75
Не имейте представителя, чтобы понизить голос, но это нарушает "пробеги только один раз" самым серьезным возможным способом.
Ксан

14
Я верю, что человек исполняет его только один раз, и это оправдано.
ojblass

54

JavaScript

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

При первом запуске он будет работать нормально:

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

Если вы попытаетесь запустить его больше (даже если обновите), вы получите ошибку:

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

5
Так что, если вы запускаете его много раз, вы получаете тему Бэтмена. +1 за это.
Hankrecords

2
@Hankrecords К сожалению, не совсем, так как это не будет выполнено позже ...
RedClover

@ Соаку Баммер ...
Hankrecords

@Hankrecords, если вы не удалите eval, но тогда он не сможет выполнить эту задачу
RedClover

46

Операционная система IBM CMS, которая является однопользовательской операционной системой, которая работает в качестве гостя под управлением IBM Hypervisor VM, имеет интересную файловую структуру.

Файлы состоят из трех элементов: «Имя файла», «Тип файла» и «Режим файла». Файловый режим состоит из двух элементов, одного алфавита, который для простоты объяснения можно рассматривать аналогично букве диска для Windows / MS-DOS, и одной цифровой цифры.

Единственная цифровая цифра имеет значение, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , и для этой задачи это номер 3, который интересен:

Режим
файла № 3 Режим файла № 3 означает, что файлы стираются после их чтения. Вы можете использовать файловый режим № 3, если вы не хотите сохранять копии на своих мини-дисках или в каталогах SFS.

Итак, потратьте часы на написание своего сценария и подайте его как «LOST FOREVER A3». Запустите его, он работает в первый раз. Отправляйся домой, работа хорошо сделана.

Обратите внимание, что сообщение об удалении не создается. В конце концов, все знают, что это 3значит, не так ли?

Это на самом деле, конечно, очень полезно. 3После завершения тестирования вы можете использовать временные файлы for, и вам не нужно будет их очищать, потому что это файлы с однократным чтением.


44

Коммодор 64 Бейсик

0 NEW

NEW удаляет программу


1
Что это делает?
Дарт Эгредиус

3
@ user973810 Если я помню основной, новый предназначен для очистки памяти, поэтому он удалит программу
user902383

3
Приятно. Не относится к Commodore 64, вероятно, работает как есть почти на каждой 8-битной машине BASIC 80-х годов ...
ysap

Вы могли бы СТАРЫЙ или О. это также назад. Я новенький 12 месяцев 12-летнего гения кодирования игры; я однажды работал случайно. Затем случайно сохранил вместо старения. О. больше не работал :( Я узнал, как шестнадцатеричные редакторы работали довольно остро, хотя :)
Мэтт Уоррен

3
@ysap: было бы более переносимым, если бы он использовал 1 в качестве номера строки; не все реализации BASIC поддерживают строку № 0.
celtschk

41

Баш, 12

Примечание: это разрушительно.

:(){ :|:&};:

Это популярная бомба-бомба. Он экспоненциально съедает всю память и PID блокирует систему. Жесткая перезагрузка позволит запустить код снова, хотя зачем вам это делать?


Баш, 10

:(){ :&};:

Для двух меньших символов это пожирает вашу память линейно.


Баш, 7

w;PATH=

w выбран как самый короткий исполняемый файл, о котором я мог подумать.

Это просто стирает переменную пути, поэтому оболочка не может найти /usr/bin/wв следующий раз. Перезапуск оболочки исправляет это, поскольку путь обычно хранится в~/.profile



1
:(){ :&};:не должен съесть вашу память. Он останавливается, как только разветвляется, поэтому O(1)активен только когда-либо . Вы сделали while(fork());, то, что съело бы вашу память линейно, эквивалентно fork(); while(1);.
Маринус

26
Вау! Это смертельные эмоции! Лучше не называть мой компьютер бигнозным хмурым лицом :(){ ...
Level River St

1
Если я правильно помню ... вилочная бомба периодически оставляет один PID открытым. Сценарий может быть запущен снова через этот интервал ... и если это не считается, можно убить все вилки с некоторым усилием. Перезагрузка - это просто самое простое решение.
Brilliand

11
Я не думаю, что это подходит. Это не делает невозможным повторный запуск сценария, а гарантирует повторный запуск (много раз).
Бен Фойгт

20

C #

Кратчайший код для удаления себя

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

Код для того, чтобы сделать его незаметным в пользовательском интерфейсе

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
Наконец, ответ C #!
Pharap

Почему выбор необходим?
wizzwizz4

19

C ++ 71

Исполняемый файл «Гольф» лишен разрешения на запуск в следующий раз.

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

JavaScript / HTML 137, 145 с консольным тестом

<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 в контексте JavaScript, я думаю, что обновление страницы считается перезагрузкой (возможно?)

2
Даже если вы не удаляете скрипт со страницы, он все равно будет выполняться только один раз. Там нет никакого смысла в этом.
nderscore

2
@nderscore Похоже, что функция h будет выполняться только один раз. Вы должны фактически вызвать его откуда-то еще (я полагаю, аналогично запуску программы). Скажем, <button onclick="h();">.
Боб

4
Учитывая, что перезагрузка страницы разрешена, и ваша цель состоит только в том, чтобы предотвратить выполнение h более одного раза, пока она уже загружена, что не так с этим function h(){h=0}?
Кин

1
С помощью #include <sys/stat.h>вы можете получить доступ к chmodфункции напрямую, сохранив немало байтов ( <stdlib.h>больше не нужно и не нужно system). Кроме того, нет returnнеобходимости.
Бен Фойгт

19

Меня зовут Shell ... PowerShell

Классическое самоуничтожающееся сообщение:

@'
##################################
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})

Пояснения, пожалуйста?
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ Строки до 13 - это просто чепуха. После этого, как и любая другая оболочка, PowerShell загружает запущенный скрипт в память и, таким образом, ему больше не нужен оригинальный файл скрипта ... поэтому он удаляет себя.
SomeShinyObject

18

Баш (5)

rm $0

Предполагая, что у вас нет пробелов в имени файла.


40
Вот почему Unix лучше Windows: rm вместо del сэкономил вам байт.
MadTux

1
@MadTux Я предпочитаю * nix Unix.
wizzwizz4

14

ш

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

Будет запущен только один раз (и он показывает «Hello, world!», Если он запускается), даже если вы переустановите систему и снова установите скрипт.


РЕДАКТИРОВАТЬ: Я решил выпустить сценарий за runonce, а также. Ничего особенного, так как он не должен был быть выпущен в любом случае, но что угодно.

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

Как и схема базы данных

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

Данные хранятся в базе данных Heroku, если хотите, можете проверить их политику конфиденциальности . Я не проверяю данные, хранящиеся в базе данных, они хранятся исключительно для того, чтобы код мог выполнить один раз.


4
Я бы сказал, что это будет выполняться несколько раз, просто после первого ничего не произойдет.
Brilliand

5
Это даже ни разу не показывало "Hello World" для меня.
Пауло Эберманн

1
@ StéphaneGourichon: Да, он запоминает IP-адреса, и нет способа удалить IP перед автоматическим удалением. Я решил поставить исходный код, чтобы вы могли проверить, что он делает.
Конрад Боровски

1
@ StéphaneGourichon: в pg_query_paramsзначительной степени защищает от SQL-инъекций. Однако он не будет сохранен, так как '; DROP TABLE users;--не является действительным IP-адресом ( inetпринимает только IP-адреса), и поэтому, если у вас есть поддельный X-Forwarded-Forзаголовок, ваш визит не будет сохранен. Я не считаю это проблемой сам.
Конрад Боровски

2
Я считаю, что это нарушение стандартной лазейки: реальный ответ на аутсорсинг .
JuniorRubyist

12

PHP, 22 20 символов

<?=unlink(__FILE__);

РЕДАКТИРОВАТЬ: удалены два символа в конце каждого комментария.


2
Это может быть дополнительно упрощено как:, <?unlink(__FILE__);трейлинг ?>не требуется
leepowers

Вы должны начать с <?=или начальный тег не распознается.
Майкл Миор

2
PHP уничтожает себя ... ха! Строка E_NOTICE 3048
метадания

<?+ пространство тоже нормально. Вы просто не можете использовать букву после короткого тега.
Тит

11

Рубин, 14

Переписывает исходный код как название программы.

IO.write $0,$0

3
А что если программа называется «IO.write $ 0, $ 0»? «Предположение: присвойте программе название, которое не является допустимым кодом ни на одном языке».
Brilliand

@Brilland программа ruby ​​всегда должна заканчиваться, .rbи даже если ее имя было «IO.write $ 0, $ 0 # .rb», это не сработает, потому что при написании она будет включать полный путь.
Mhmd

3
@Mhmd программа ruby ​​может закончиться чем угодно. Например gemи irbRuby-программы без расширения.
bfontaine

@bfontaine У которых есть shebangs. Это не
wizzwizz4

@ wizzwizz4 Shebangs не имеет ничего общего с расширением. ruby fooи ruby foo.rbбудет работать так же с или без шебанга. ./fooи ./foo.rb(при условии, что они исполняемые) потерпят неудачу без Шебанга и преуспеют с ним (при условии правильного кода и т. д.).
Бфонтен

10

Пакетная (6 символов)

Это предполагает, что у нас есть разрешение на удаление файла, и, конечно, это можно сделать в Windows (может быть, и в MS-DOS).

del %0

10

Bash 9 8 символов

nc -l 1&

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


1
Я думаю, что это не работает, потому что 0это специальный порт (он зарезервирован). Когда я запускаю это на своем компьютере, я могу открыть его несколько раз. Кроме того, это порт < 1024, что означает, что для прослушивания требуется root-доступ.
heinrich5991

nc -l 1&устранит проблему 0и будет на один байт короче, поскольку последний пробел не нужен.
Касперд

@kasperd Спасибо за вклад :-)
Falco

@ heinrich5991 хорошо - тогда мне понадобилось бы 11 символов без root-доступа для использования порта, подобного 9654
Falco

Не хочешь объяснить, почему ты проголосовал?
Falco

9

NodeJS - 33 байта

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

Не могли бы вы описать, что это делает для тех, кто не знаком с языком?
Кайл Канос

1
@KyleKanos Получает модуль файловой системы fsи текущее имя файла __filenameи удаляет это имя файла из файловой системы.
Кин

7
Вы можете исключить точку с запятой, потому что они не обязательны в JavaScript.
Вскоре

8

Пакетный, 7 символов

Сохраните несохраненную работу, прежде чем пытаться это сделать.

Предполагается либо 64-разрядная система, либо 32-разрядная система с объемом оперативной памяти <2 ГБ. Перед запуском необходимо сохранить его в файл .bat или .cmd, просто не введя его в cmd.exe.

^ nul<^

Он потребляет полное ядро ​​процессора и заполняет вашу оперативную память со скоростью несколько сотен мегабайт в секунду. Если вы не остановите его вовремя (диспетчер задач), он будет расходовать каждый байт оперативной памяти на вашем компьютере, вся ваша система зависнет, и вы ничего не сможете сделать, прежде чем принудительно выключить и перезагрузить компьютер с помощью обрезки. питания или удерживая кнопку питания вниз.

Все кредиты идут в txtechhelp на StackOverflow для этого, см. Дополнительную информацию здесь: https://stackoverflow.com/q/23284131/1955334


Как это было бы возможно? Как насчет подкачки? Приоритет процесса?
Николас Барбулеско

Я запустил этот скрипт, ничего не случилось.
Павел

@Pavel Я думаю, это исправлено в Windows 10. Я не могу воспроизвести его на Windows 10, но он работает на Windows 8.1.
bilde2910

1
«Он потребляет полное ядро ​​процессора и заполняет вашу оперативную память со скоростью несколько сотен мегабайт в секунду. Если вы не остановите его вовремя (диспетчер задач), он будет использовать каждый байт оперативной памяти на вашем компьютере, всей вашей системе зависнет, и вы ничего не сможете сделать, прежде чем принудительно выключить и перезагрузить компьютер, отключив питание или удерживая кнопку питания нажатой. " Звучит как ужасная история для компьютеров ...
noɥʇʎԀʎzɐɹƆ

7

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

удар

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

Это довольно просто. Переменная $REPLYсоздается неявно read, но заполняется пустой строкой. Эта пустая строка затем printfдобавляется в текущий скрипт. Это довольно запутанный эквивалент следующего:

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

Пакет Windows

copy con %0 < nul

Второй в основном копирует консольный ввод, считанный из nul, в текущий файл.


Опубликовано после того, как это стало популярным конкурсом
Isiah Meadows

1
Первый не будет работать без прав root. Почему вы пытаетесь заменить нулевое устройство? При запуске с правами root это фактически приводит к тому, что система ведет себя беспорядочно. Вы также перезаписываете ноль при записи в него :) Почему бы просто не переместить его в другое место? Например, mv "$ 0" "$ {0} x" или что-то еще? Это должно сделать свое дело.
Орион

Файл все еще существует после?
Исия Медоуз

Теперь я полностью изменил пример Bash.
Исия Медоуз

Как они не разрушительны?
Ysap

7

Синклер бейсик

10 POKE 23635,255

Перемещает адрес программы BASIC в памяти из того места, где он должен быть (203), чтобы интерпретатор нашел неверные данные.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.