Wyzwanie: Napisz fragment kodu, który sam się zamyka [zamknięty]


39

Szukam (jestem?) Fragmentu kodu, który natychmiast się kończy - w absolutnie niekonwencjonalny sposób.

Nie oznacza to: System.exit((int) 'A');(Java).

Może to oznaczać:

#!/usr/bin/env python3
# NOTE: This kills ALL RUNNING Python processes. Be careful!
def exit():
    import os
    os.system("killall python3")
    # Windows addon
    os.system("taskkill /im python.exe /f")
exit()

Najpopularniejsza odpowiedź wygrywa! Wszystkie języki, wszystkie architektury.

Edycja: rzucanie wyjątków nie będzie już akceptowane!


3
Ale nie jest to niekonwencjonalne, aby zakończyć wykonywanie ... Cóż, jest to alternatywa dla exit(), ale wciąż jest to zaimplementowana funkcja ...
s3lph

13
To nie jest trolling kodu - wiemy, że chcemy od tego dziwnych odpowiedzi.
Liam Dawson

6
Czy wyłączenie systemu działa?
Hosch250,

8
Raz przypadkowo spowodowałem kartę sieciową w DMA za pośrednictwem systemu operacyjnego. Kiedy to się stało, natychmiast wróciłeś do BIOS-u, restartowałeś się.
Ben Jackson

3
Wydaje mi się, że Shannon nas tu pobił;)
gwiazda

Odpowiedzi:


44

uderzenie, 6 znaków

exec [

execzastępuje bieżący proces czymś innym. [jest najkrótszym poleceniem, które mogę znaleźć, które jest nieszkodliwe (jest to alias test)


Kolejny wyjątek?
Johannes Kuhn

Nie, po prostu exec„ing na [polecenia :)
Dennis Kaarsemaker

1
dlaczego to działa co robi?
s3lph

@the_Seppi zamienia bieżący proces na [(inaczej test)
Timtech

~ $ echo $PATH/?-> /bin/X /bin/[ /bin/w. Rybia skorupa dała mi jeszcze dwa inne polecenia. wjest moim zdaniem interesujące.
Konrad Borowski,

46

Grzmotnąć

echo "Turn off your computer or i'll wipe your harddrive..."
echo 3;sleep 1
echo 2;sleep 1
echo 1;sleep 1
dd if=/dev/random of=/dev/hda

Kończy program tak szybko, jak użytkownik może zareagować ;-)


10
Wzniosłe głosowanie, bo mnie rozśmieszyło.
Michael Stern

5
Lepiej nie uruchamiaj go w systemie Linux.
kenorb

1
dd: / dev / hda: not found
Joshua

39

Redcode

(Tło: Redcode to pseudo-asembler używany w grze programistycznej Core War wprowadzonej przez AK Dewdney w 1984 roku. Zazwyczaj korzysta z samodomodyfikującego się kodu. Kilka lat temu napisałem fajny samouczek na temat programowania Redcode . )

MOV 1, 0

Ten program z pojedynczą instrukcją nie tylko sam się zabija, ale także usuwa własny kod programu z pamięci, nie pozostawiając po sobie śladu w pamięci.

Nudny, mówisz? W końcu powyższy program i tak by umarł, nawet gdyby nie nadpisał swojego kodu. OK, oto taki, który wyciera cały rdzeń do czysta, zanim w końcu sam się wyciera i umiera:

loop: MOV  ptr+1, >ptr 
      JMN  loop, loop
      SPL  1
      SPL  1
      MOV  ptr+1, >ptr
ptr:  DAT  0, 1

Pierwsze dwie instrukcje faktycznie wykonują większość pracy: jest to zwykła pętla kopiowania / przeskakiwania, która kopiuje pustą komórkę instrukcji (która jest inicjowana DAT 0, 0) po zakończeniu programu do każdej kolejnej komórki (przy użyciu pośredniego trybu adresowania postkrementalnego >), aż wskaźnik w końcu owinie się do początku pamięci i nadpisze MOVsamą pętlę. Gdy to nastąpi, JMN(JuMp, jeśli nie zero) wykrywa go i przewraca się.

Problem polega na tym, że wciąż JMNnie rozprasza się. Aby się go pozbyć, musimy inny MOVaby wytrzeć JMN... ale to oznacza, że musimy jeszcze inny MOVdo wycierania , które MOV i tak dalej. Aby cały program zniknął bez śladu, musimy jakoś zorganizować pojedynczą MOVinstrukcję, aby wyczyścić zarówno siebie, jak i co najmniej jedną inną instrukcję.

Tam właśnie SPLprzychodzi - to jeden z najdziwniejszych kodów w Redcode. Zasadniczo jest to instrukcja „Rozgałęziać obie drogi”. Widzisz, zamiast prostego rejestru „licznika programu”, jak każdy normalny procesor, maszyna wirtualna Redcode ma „kolejkę procesów”: cykliczną listę wskaźników do instrukcji do wykonania. Zwykle w każdym cyklu wskaźnik instrukcji jest przesuwany poza głowę kolejki, instrukcja jest wykonywana, a następna instrukcja (chyba że nastąpił skok lub niedozwolona instrukcja) jest wypychana na ogon kolejki. Ale SPLpowoduje, że zarówno kolejna instrukcja, jak i podana instrukcja docelowa (która w przypadku SPL 1jest również kolejną instrukcją) jest wypychana do kolejki.

Konsekwencją tego wszystkiego jest to, że po wykonaniu dwóch SPL 1instrukcji w kolejce są teraz cztery procesy, wszystko o wykonywaniu ostatniego MOV. To wystarczy, aby wyczyścić JMNzarówno SPLs , jak i MOVsamą, a także pozostawia ptrkomórkę instrukcji jako DAT 0, 0- nie do odróżnienia od otaczającego ją pustego rdzenia.

(Ewentualnie moglibyśmy zastąpić ptrinstrukcję instrukcją MOV 1, 1, która zostałaby przekonwertowana MOV 1, 0na wcześniejsze instrukcje, a więc sama by się wyczyściła, tak jak zrobił to pierwszy program powyżej).

Ps. Jeśli chcesz przetestować ten program, pobierz symulator Redcode (inaczej MARS). Polecam albo CoreWin, albo czcigodny pMARS , chociaż jest też kilka innych dobrych symulatorów.


Czy nie spowoduje to po prostu naruszenia zasad dostępu?
Danny Varod

12
Naruszenie dostępu? Co to za dziwna rzecz? (Poważnie, Redcode działa na dość abstrakcyjnej maszynie wirtualnej. Całe adresowanie jest względne, przestrzeń adresowa jest ciągła (i cykliczna), a każdy adres jest prawidłowy.)
Ilmari Karonen

Czy MOV 1, 0 kopiuje 1 na adres 0 lub na odwrót? We wszystkich językach asemblera wiem, że adres 0 jest nielegalny (adres NULL).
Danny Varod

4
Składnia jest następująca MOV source, dest. Ale jak powiedziałem, całe adresowanie w Redcode jest względne, więc adres 0faktycznie oznacza „adres tej instrukcji”, podczas gdy adres 1faktycznie oznacza „adres tej instrukcji + 1”. (I absolutny adres 0 nie jest w żaden sposób specjalna w Redcode każdym razie, w rzeczywistości jeden interesujący konsekwencją „wszystko jest względne adresowanie” konstrukcja jest taka, że jest to rzeczywiście niemożliwe dla programu Redcode znaleźć swój własny adres bezwzględny w rdzeniu! )
Ilmari Karonen

2
Człowieku, jestem ci bardzo wdzięczny. Nigdy nie słyszałem o Core War.
patrz

32

do

#include <conio.h>  /* Computer-Operated Nuclear Installation Options */
int main () {
    clrscr();       /* Commence Launch (Remote Systems Console Request) */
    kbhit();        /* Keep Busy until hit */
}

Pamiętaj, że to nie jest przenośny kod. Współpracuje z ZOG C na ART DS9000 . Uważam, że użycie niekonwencjonalnego uzbrojenia kwalifikuje ten kod do tego wyzwania. Jeśli obawiasz się, że opóźnienie w dostarczeniu tego fragmentu kodu nie kwalifikuje się jako natychmiastowe , skontaktuj się z nami, aby uzyskać porady na temat ostrzeżeń zapobiegawczych.

efekt uruchomienia

Na moim komputerze domowym nawet się nie kompiluje - nie mam odpowiednich sterowników i bibliotek. Słyszałem, że istnieją popularne implementacje języka C, w których ten program kompiluje się i działa z mniej spektakularnymi efektami, ale nigdy nie miałem odwagi spróbować.


2
Najlepsza odpowiedź, bez dwóch zdań!
Wektor

3
+1. (0) 1; na początku myślałem, że @Gilles trolluje tutaj ... ale potem sprawdziłem stronę ART Inc. ... i wtedy zdałem sobie sprawę, jak bardzo byłem trollowany!
vaxquis

30

JavaScript

window.location.replace("http://pieisgood.org");

Wystarczy przejść do innej ( pysznej ) strony internetowej. :-)

Gra w golfa (10 znaków):

location=1

7
mmmm, lody: P
Lotność

28

DO#

Zabija się, zabijając każdy proces oprócz siebie.

foreach (Process p in Process.GetProcesses()) {
    string myexe = Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
    if (p.ProcessName == myexe) continue;
    p.Kill();
}

Aby trochę urozmaicić, moglibyśmy TerminateProcessużyć PInvoke zamiast używaćProcess.Kill


4
+1 za bardzo niekonwencjonalną metodę zabijania każdej innej rzeczy, powodując w ten sposób, że twój program spada z systemem (a przynajmniej zakładam, że taki jest pomysł?). Nie mam środowiska uruchomieniowego C # na tym komputerze, ale muszę zapytać ... Czy w praktyce powoduje to wyłączenie systemu, czy tylko wszystkie uruchomione procesy? (Myślałem, że programy w języku C # same wywoływały interpretera, a zatem nie polegały na istnieniu określonego procesu JIT / CIL ...). Znów świetna robota, myślenie „nieszablonowo” (har har) na tym :)
Przełom

4
-1 (gdybym miał przedstawiciela): Meta na temat trollowania kodu mówi, że destrukcyjne odpowiedzi są niedozwolone ze względu na ryzyko, że ludzie spróbują ich na własnych komputerach. Zobacz drugi punkt na liście ograniczeń: codegolf.stackexchange.com/tags/code-trolling/info
Kevin - Przywróć Monikę

Procesów systemowych nie można zabić bez uprawnień administratora, prawda?
Sarge Barszcz

3
@Kevin code-challenge i code-trolling to różne tagi z różnymi regułami.
osvein

3
@ user1981338: pytanie pierwotnie miało znacznik trollowania kodu, ale od tego czasu zostało zredagowane. Teraz, gdy tag zniknął, +1.
Kevin - Przywróć Monikę

21

BASH - 12 znaków

:(){ :|:&};:

Klasyczny widelec. Blokuje komputer i zmusza użytkownika (lub administratora) do ponownego uruchomienia.


5
Nudne - ale nadal moim ulubionym. Używam tego do zamykania systemów na żywo
s3lph

3
Zaczyna się tyle razy, ile może, to nie jest koniec.
marinus

1
Ale uruchomi tyle procesów, ile to możliwe, dopóki komputer się nie zawiesi, a zatem zamknie program
s3lph

14
+1 za dodanie emotikonów, takich jak :()i:|
ProgramFOX

1
@Kartik: Bez pierwszej spacji pojawi się błąd składniowy. Możesz wyeliminować drugi.
Dennis

20

Python (na starych laptopach)

Na starych laptopach z jednordzeniowymi procesorami i złym chłodzeniem:

while True:
    print("CPU Temperature rising")

Gdy laptop eksploduje (lub po prostu się wyłącza) po kilku godzinach, program się nie uruchomi.

(Aby uzyskać najlepsze wyniki, owiń laptopa w koc lub coś takiego)


18

Rubin

kills działający proces ruby ​​/ irb na * nix.

`kill #{$$}`

2
Podoba mi się elegancja tego. +1
Klamka

18

Apple 2 Basic

1 PRINT "HELLO"
2 POKE 2053,128
3 POKE 2054,58
4 GOTO 1

Zastępuje jedną z instrukcji instrukcją END.


Jak to działa?
Johannes

5
@Johannes: w Applesoft BASIC program jest przechowywany w formie tokenizowanej w pamięci. Ponieważ nie ma systemu operacyjnego ani ochrony pamięci, zawsze jest przechowywany w tym samym miejscu i nie ma nic, co powstrzymałoby cię przed zapisaniem w tej pamięci. Tak więc pierwszy POKEzapisuje ENDtoken nad PRINTtokenem, a następnie drugi POKEzapisuje terminator poleceń nad pierwszym ". Kiedy GOTOzostanie wykonane, kończy się ENDzamiast, PRINTa program się kończy.
marinus

14

W asemblerze coś takiego prawdopodobnie działałoby:

jmp 0

Pamiętam, że kompiluje to faktycznie działało DOS. Wtedy ponownie uruchomił komputer.


spróbuj ret; Właściwie opublikuję to jako odpowiedź: P
Julien Lebot

retf zadziała, już to umieściłem w odpowiedzi :) To zabija ze względu na sposób segmentacji pamięci (lub nie działa, powinienem powiedzieć) na nowoczesnych systemach operacyjnych
chbaker0

»Jmp 0« działa z DOS, ponieważ pierwsze dwa bajty segmentu kodu to CD 20 lub „INT 20”, który jest kodem dla programu obsługi wyjścia. »Push 0; ret «może mieć taki sam efekt.
Daniel

13

PHP

function quit(){unlink(__FILE__);posix_kill(getmypid(),15);}

Efekty:
Usuwa twój kiepski plik skryptu, a następnie zabija program.
Wrzuć jednego z tych złych chłopców do bazy kodowej, aby zmylić ludzi.


To nie jest poprawna składnia PHP. Próbujesz zdefiniować funkcję, quitale lista parametrów to kod do uruchomienia. Podczas próby uruchomienia pojawia się błąd analizy.
Emil Vikström

@ EmilVikström - Naprawiono teraz.
donutdan4114

12

C, 9 znaków

Kompiluje się z gccinnymi kompilatorami, które nie mają nic przeciwko drobnym szczegółom, takim jak mainbrak funkcji.
Działa na x86platformach - program natychmiast kończy działanie.

main=195;

195 to kod operacji retinstrukcji.


4
Segfault dla mnie. mainznajduje się w, .dataponieważ jest to int, a nie in .texti .datajest ładowany na stronie niewykonywalnej.
mniip

10

Zawsze chciałem gdzieś to opublikować, chyba pasuje tutaj, mimo że istnieje już akceptowana odpowiedź.

int
main(int argc, char **argv)
{
        revoke(*argv);
}

Działa to na dowolnym systemie post 4.3BSD i innych, które implementują revokew ten sam sposób. Linux nie ma nawet prototypu, MacOS zrobił to w przeszłości, ale zwraca błędy tylko w najnowszych wersjach.

revokepobiera ścieżkę do pliku i siłą niszczy wszystkie odwołania do tego pliku. Obejmuje to wszelkie mapowania pamięci tego pliku, nawet sam plik wykonywalny. Oczywiście musisz uruchomić program ze ścieżką do niego, to nie zadziała, jeśli zdarzy się, że jest w PATH.

Odmianą tego, która powinna działać na większości systemów uniksowych, jest:

#include <sys/mman.h>
#include <inttypes.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
        intptr_t ps = getpagesize();
        munmap((void *)(((intptr_t)main)&~(ps - 1)), ps);
}

Po prostu odwzorowujemy stronę, która jest mapowana main, aby po wezwaniu do munmappowrotu nie miała nigdzie do niej wrócić. Istnieje niewielka szansa, że ​​wywołanie funkcji munmapjest tylko na granicy strony, a powrót zakończy się powodzeniem, więc aby być całkowicie pewnym, że to działa, prawdopodobnie najpierw musimy usunąć mapowanie dwóch stron.

I oczywiście odmiana na ten sam temat:

#include <sys/mman.h>
#include <inttypes.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
        intptr_t ps = getpagesize();
        munmap((void *)(((intptr_t)&ps)&~(ps - 1)), ps);
}

Wystarczy odwzorować stos, abyśmy nie mieli do kogo wrócić. To samo zastrzeżenie co odmapowanie main- może być konieczne usunięcie mapowania dwóch stron, z wyjątkiem tego, że musimy pamiętać, że stos prawdopodobnie rośnie (chyba że korzystasz z PA-RISC lub innej dziwnej architektury tego typu).

Kolejny sposób na wyciągnięcie dywanu spod własnych stóp:

#include <sys/resource.h>

int
main(int argc, char **argv)
{
        setrlimit(RLIMIT_CPU, &((struct rlimit){ 0 }));
        while(1);
}

Jest to zależne od systemu operacyjnego od tego, jak system obsługuje limit 0 sekund procesora i od tego, jak często rozlicza się czas procesora. MacOS natychmiast zabija proces, Linux wymaga pętli while, inny system, którego próbowałem, nie zrobił nic, nawet z limitem jednej sekundy, a pętla while nie debugowała dalej.


9

sh

sudo kill -SEGV 1

Natychmiastowa paniczna kernal w systemie Linux. Przeznacza wszystkie procesy, w tym siebie

Cmd

pskill csrss.exe

Natychmiastowy niebieski ekran w systemie Windows. Kończy się Client/Server Runtime SubSystem. Pskill musi być zainstalowany.


Czy killall initteż działałoby?
s3lph

1
@the_Seppi 1. Tylko użytkownik na poziomie root może wysyłać sygnały do ​​init 2. Init spowoduje panikę jądra tylko wtedy, gdy odbierze sygnał 11 (błąd segmentacji)
MultiplyByZer0

OK, dziękuję ... Czy wiesz, co się stanie, jeśli użyjeszsudo killall init
s3lph

1
@the_Seppi Tak, robię, próbowałem już wcześniej. Init ignoruje to, ponieważ init może zdecydować, czy odbierze sygnał, czy nie, więc całkowicie ignoruje SIGKILL. unix.stackexchange.com/questions/7441/…
MultiplyByZer0

8

W C (kompatybilny z Windows / Linux / (prawdopodobnie także Unix / Freed BSD)):

main;

Przykład użycia:

Pod Windows skompiluj z:

echo main; > main.c && cl /Fe:main.exe main.c

I Linux:

echo "main;" > main.c && gcc -w -o main main.c

Zakładając, że kompilator jest zainstalowany i w bieżącej zmiennej PATH.

EDYCJA: Technicznie generuje wyjątek (zgłoszony przez procesor) w systemie Linux, ale nie ma takiego komunikatu w systemie Windows. Więc ten wpis prawdopodobnie nie jest prawidłowy; jednak myślę, że to fajne: P

EDYCJA: W asemblerze x86 (używając NAsm / YAsm)

global s
s:
    ret

Połącz z:

(Windows)

nasm -f win32 -o test.obj test.asm
LINK /OUT:test.exe /SUBSYSTEM:CONSOLE /ENTRY:s test.obj

(Linux)

nasm -f elf32 -o test.obj test.asm
ld -o test -e s test.obj

Niestety w ten sposób produkuje się również zrzut pamięci na Linux, więc uważam, że jest funkcjonalnie równoważny metodzie C; z wyjątkiem bardziej wydajnych.


1
Łał! Właśnie to skompilowałem -Wall -Wextra -std=c99 -pedantici nie ma żadnych ostrzeżeń.
ldrumm

Właściwie to chciałem to powiedzieć, ale postanowiłem odmówić , ponieważ byłoby to duplikatem mojego rozwiązania innego problemu ( codegolf.stackexchange.com/a/8778/3103 ).
Konrad Borowski,

7

Haskell traktuje sprawy dosłownie w głupi sposób:

import System.Exit

absolutely doThis = if True then doThis else undefined

unconventional doThat = do
  putStrLn "I could just do that"
  putStrLn "But I'm gonna print factorial of 100 first"
  putStrLn "There you go:"
  print $ fac 100
  doThat
  where fac n = foldl (*) 1 [1..n]

main = absolutely unconventional exitFailure

6

Pyton


Za pomocą multiprocessingmodułu możemy odrodzić inny wątek, którego zadaniem jest komunikacja z pierwotnym procesem za pośrednictwem kolejki, informując go, kiedy należy wyjść:

import multiprocessing
import time
queue = multiprocessing.Queue()

def second_thread():
    while True:
        queue.put('quit')
        time.sleep(0.1)

second_ps = multiprocessing.Process(target = second_thread)
second_ps.start()

while True:
    msg = queue.get()
    if msg == 'quit':
        break
    time.sleep(0.1)

second_ps.join()

6

ANSI C

Bez optymalizacji kodu następujący program kończy się tak szybko - w rzeczywistości nie można go uruchomić, nawet jeśli skompiluje się w poprawny program

#include<stdlib.h>
#include<stdio.h>

char tooLong[0x7CFFFFFF];

void main()
{
    printf("never executed.");
}

może to zależeć od systemu - skomentuj, jeśli możesz go uruchomić.


„Rzucanie wyjątków nie będzie już akceptowane!” i obejmuje to błędy braku pamięci
John Dvorak

2
@JanDvorak Istnieją różnice między błędami a wyjątkami .
syb0rg

Uważam jednak, że reguła obejmuje oba te elementy. Czy pytający może to wyjaśnić? I nie, nie sądzę, aby pytanie SO dotyczące Javy było dobrym odniesieniem, zwłaszcza gdy bronisz rozwiązania C.
John Dvorak

9
Program nie zgłasza błędu ani nie powoduje błędu w programie. System nie może tego obsłużyć.
Johannes

6

W porządku. Jeśli zwykłe wywołanie System.exitnie jest dozwolone w Javie, co powiesz na wywołanie poprzez odbicie z innego wątku?

import java.lang.reflect.*;

public class Quit {
    public static void main(String[] args) throws Exception {
        final Method exit = System.class.getMethod("exit", new Class<?>[]{ int.class });
        new Thread(new Runnable() {
            @Override public void run() {
                try {
                    System.out.println("calling... " + exit);
                    exit.invoke(null, new Object[] { 0 });
                } catch (Exception e) { e.printStackTrace(); }
            }
        }).start();
        for (int i = 1; ; ++i) {
            System.out.println("counting... " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) { break; }
        }
    }
}

Wyszukuje metodę wyjścia, odradza nowy wątek i odlicza czas, aż ten wątek zabije proces, wywołując wyjście przez odbicie.


Odlicza? Wygląda na to, że się liczy.
Justin

1
Eee, dobra racja. Powinienem był powiedzieć, że się liczy, lub po prostu powiedzieć, że się liczy, dopóki nie wyjdzie.
David Conrad,

6

język maszynowy x86, 1 znak

Zazwyczaj można wykonać wykonalny plik wykonywalny z jednej instrukcji RET

\xC3 

4
Jak to jest niekonwencjonalne ?!
aditsu

6

C (Linux)

Wersja samobójcza

Wysyła SIGKILL do siebie.

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int main() 
{
    kill(getpid(),SIGKILL);

    printf("Not killed");
}

Wersja „Tu quoque mi fili”

Forks, a następnie syn zabija ojca.

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int main() 
{
    if (!fork())
        kill(getppid(), SIGKILL);

    printf("Not killed");
}

5

Perl

...

To wszystko.


Objaśnienie: Zgłasza wyjątek Unimplementedi natychmiast kończy działanie.


Dodano wyjaśnienie.
PhiNotPi

3
Nie wiem, wyjątki są nudne.

6
Invalif ze względu na adaptację wyzwania: bez wyjątków
s3lph 28.12.2013

Po prostu jeszcze nie udało mi się napisać kolejnej odpowiedzi.
PhiNotPi

5

Partia i debugowanie

Starsze ale dobre, działa na maszynach DOS w celu natychmiastowego ponownego uruchomienia systemu. Premia w tym, że jest to jeden skrypt przeznaczony do interpretacji przez dwóch różnych niekompatybilnych tłumaczy.

reset.bat

goto start

rcs
ffff
rip
0000
g
:start
debug < reset.bat

Interpretacja pliku wsadowego pomija instrukcje przeznaczone do debugowania i podaje się do debugowania w celu interpretacji. Pusty wiersz po gotojest potrzebny, aby usunąć błąd w debugwynikach, ponieważ podano mu nieznane polecenie, którym jest goto.


1
Robiłem to samo, co dec ax; pchnięcie toporem; push bx; retf
moopet

3

Jawa

Poniższy kod nie jest testowany i będzie działał tylko na niektórych platformach.

public class Quitter
{
       public static void main ( String [ ] args )
       {
             Process process = Runtime . getRuntime ( ) . exec ( "reboot" ) ;
       }
}

45
Co jest z tą straszliwą białą spacją
Klamka

7
W systemie UNIX musiałby to być sudo rebootsystem Windowsshutdown /r /t 0
s3lph

2
W systemie UNIX wystarczy uruchomić ten program za pomocą sudo, a nie polecenie, które chcesz wykonać.
Johannes Kuhn

1
@ the_Seppi, @ JohannesKuhn, jak powiedziałem, działa tylko na niektórych platformach i zakładałem, że będziesz go wywoływał w ten sposób sudo java Quitter.
emory

3
-1 NIE Dosyć WHITESPACE !!!
vaxquis

3

PowerShell

get-process | stop-process -force

Zapisz to jako „lastresort.ps1” i powinno wystarczyć.

Jeśli napotkasz problemy z niewykonywaniem skryptu z powodu pewnych głupich zasad, wpisz to przed wykonaniem skryptu:

Set-ExecutionPolicy Unrestricted

Działa dobrze z wiersza poleceń bez zapisywania również jako skrypt.
Iszi

3

TI-Basic 84

:;;::;banana\\sEnd\;:;1:If X=X-1 :eat banana juice and lol;;;::::;:thought you could EAT THINGS XD /// CRAZIEST ANSWER YET!!!

3

Python (jednoliniowa alternatywa dla OP)

Uznałem, że nie ma tak naprawdę lepszej odpowiedzi w Pythonie niż sugestia OP, ale nie podobało mi się, ile było tak wielu linii, więc oto, jak robisz dokładnie tak, jak OP, ale w jednym wierszu:

exec(''.join([ chr(x) for x in [35, 33, 47, 117, 115, 114, 47, 98, 105, 110, 47, 101, 110, 118, 32, 112, 121, 116, 104, 111, 110, 10, 35, 32, 117, 110, 105, 120, 32, 111, 110, 108, 121, 44, 32, 109, 105, 103, 104, 116, 32, 119, 111, 114, 107, 32, 111, 110, 32, 119, 105, 110, 100, 111, 119, 115, 10, 35, 32, 110, 111, 116, 101, 58, 32, 107, 105, 108, 108, 115, 32, 65, 76, 76, 32, 82, 85, 78, 78, 73, 78, 71, 32, 112, 121, 116, 104, 111, 110, 32, 112, 114, 111, 99, 101, 115, 115, 101, 115, 46, 32, 66, 101, 32, 99, 97, 114, 101, 102, 117, 108, 32, 47, 33, 92, 10, 100, 101, 102, 32, 101, 120, 105, 116, 40, 41, 58, 10, 32, 32, 32, 32, 105, 109, 112, 111, 114, 116, 32, 111, 115, 10, 32, 32, 32, 32, 111, 115, 46, 115, 121, 115, 116, 101, 109, 40, 34, 107, 105, 108, 108, 97, 108, 108, 32, 112, 121, 116, 104, 111, 110, 51, 34, 41, 10, 32, 32, 32, 32, 35, 32, 87, 105, 110, 100, 111, 119, 115, 32, 97, 100, 100, 111, 110, 10, 32, 32, 32, 32, 111, 115, 46, 115, 121, 115, 116, 101, 109, 40, 34, 116, 97, 115, 107, 107, 105, 108, 108, 32, 47, 105, 109, 32, 112, 121, 116, 104, 111, 110, 46, 101, 120, 101, 32, 47, 102, 34, 41, 32, 35, 32, 111, 114, 32, 119, 104, 97, 116, 101, 118, 101, 114, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 112, 121, 116, 104, 111, 110, 64, 119, 105, 110, 100, 111, 119, 115, 32, 104, 97, 115, 10, 101, 120, 105, 116, 40, 41, 10] ]))

Możesz sprawić, by ta funkcja działała dla Ciebie.


3

Mój własny pomysł, brak udziału

TIGCC (dla Texas Instrumens TI-89, TI-89 Titanium, TI-92 +, TI-V200)

void main(void) {
    unlink("quit");
    asm("trap #2");
}

TI-Basic dla tych samych kalkulatorów

quit()
:© lines starting with © are comments
:Prgm
:©DelVar quit
:Exec "4E424E750000"
:EndPrgm

Co robi program: Najpierw usuwa się z pamięci RAM. (Nie wkładaj go do pamięci ROM, bo inaczej nie zadziała ...) Może nadal działać, ponieważ podczas wykonywania tworzona jest i wykonywana kopia programu. asm(trap #2);wywołuje polecenie ASM 4E424E750000, które służy do resetowania kalkulatora, usunięcia jego pamięci RAM (Flash ROM pozostaje nietknięty) i ponowną instalację wszystkich aplikacji.

EDYCJA: Właśnie przetestowałem wersję podstawową. Nie można go usunąć ...


3

Format MS-DOS .com

Zapisuje w pamięci nieprawidłowe instrukcje (FFFF), a następnie je wykonuje, powodując awarię NTVDM.

Szesnastkowy

B8 FF FF A3 06 01

Język asemblera Debug.exe

MOV AX, FFFF
MOV [0106],AX
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.