Herausforderung: Schreiben Sie einen Code, der sich selbst beendet [geschlossen]

39

Ich suche (bin ich?) Nach einem Code, der sofort beendet wird - auf eine absolut unkonventionelle Weise.

Dies bedeutet nicht: System.exit((int) 'A');(Java).

Es könnte bedeuten:

#!/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()

Die am besten bewertete Antwort gewinnt! Alle Sprachen, alle Architekturen.

Bearbeiten: Das Beenden durch Ausnahmen wird nicht mehr akzeptiert!

s3lph
quelle
3
Aber das ist nicht unkonventionell, um die Ausführung zu beenden ... Nun, es ist eine Alternative zu exit(), aber es ist immer noch eine implementierte Funktion ...
S3LPH
13
Dies ist kein Code-Trolling - wir wissen, dass wir seltsame Antworten von diesem wollen.
Liam Dawson
6
Funktioniert das Herunterfahren des Systems?
Hosch250
8
Ich habe mal versehentlich eine Netzwerkkarte zu DMA über das Betriebssystem geführt. Als es passierte, waren Sie sofort wieder im BIOS und starteten neu.
Ben Jackson
3
Ich habe das Gefühl, Shannon hat uns hier geschlagen;)
Sternchen

Antworten:

44

Bash, 6 Zeichen

exec [

execersetzt den aktuellen Prozess durch etwas anderes. [ist der kürzeste Befehl, den ich finden konnte, der harmlos ist (ein Alias ​​für test)

Dennis Kaarsemaker
quelle
Eine andere Ausnahme?
Johannes Kuhn
Nein, exec[
ich gebe
1
warum funktioniert es was macht
S3LPH
@the_Seppi es ersetzt den aktuellen Prozess mit [(aka Test)
Timtech
~ $ echo $PATH/?-> /bin/X /bin/[ /bin/w. Fish Shell gab mir zwei weitere Befehle. wist meiner meinung nach interessant.
Konrad Borowski
46

Bash

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

Beendet das Programm so schnell der Benutzer reagieren kann ;-)

Daniel
quelle
10
Upvoting, weil es mich zum Lachen gebracht hat.
Michael Stern
5
Führen Sie es besser nicht unter Linux aus.
Kenorb
1
dd: / dev / hda: nicht gefunden
Joshua
39

Redcode

(Hintergrund: Redcode ist die Pseudo-Assembler-Sprache, die in dem 1984 von AK Dewdney eingeführten Programmierspiel Core War verwendet wird. Dabei wird in der Regel stark auf selbstmodifizierenden Code zurückgegriffen. Ich habe vor einigen Jahren ein nettes kleines Tutorial zur Redcode-Programmierung geschrieben. )

MOV 1, 0

Dieses Einzelanweisungsprogramm tötet sich nicht nur selbst, sondern löscht auch seinen eigenen Programmcode aus dem Speicher und hinterlässt keine Spur von sich selbst im Speicher.

Langweilig, sagst du? Immerhin wäre das obige Programm ohnehin abgestorben, selbst wenn es seinen Code nicht überschrieben hätte. OK, hier ist einer, der den gesamten Kern sauber wischt , bevor er sich endgültig abwischt und stirbt:

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

Die ersten beiden Befehle erledigen tatsächlich den größten Teil der Arbeit: Es ist nur eine einfache Kopier- / Sprungschleife, die die leere Befehlszelle (auf die initialisiert wird DAT 0, 0) nach dem Programmende in jede nachfolgende Zelle kopiert (unter Verwendung des indirekten Adressierungsmodus nach Inkrementierung) >), bis der Zeiger schließlich an den Anfang des Speichers springt und den MOVin der Schleife selbst überschreibt . Sobald dies geschieht, JMNerkennt das (JuMp wenn nicht Null) es und fällt durch.

Das Problem ist, dass dies immer noch die JMNselbst abgewischt lässt. Um es loszuwerden, brauchen wir einen anderen MOV, um das abzuwischen JMN... aber das bedeutet, wir brauchen noch einen anderen MOV, um das abzuwischen MOV, und so weiter. Um das gesamte Programm spurlos verschwinden zu lassen, müssen wir irgendwie dafür sorgen, dass eine einzelne MOVAnweisung sowohl sich selbst als auch mindestens eine andere Anweisung löscht .

Hier SPLkommt das ins Spiel - es ist einer der seltsamsten Opcodes in Redcode. Grundsätzlich handelt es sich um eine Anweisung zum Verzweigen in beide Richtungen. Sie sehen, anstelle eines einfachen "Programmzähler" -Registers, wie es jede normale CPU hätte, hat die Redcode-VM eine "Prozesswarteschlange": eine zyklische Liste von Zeigern auf auszuführende Anweisungen. Normalerweise wird bei jedem Zyklus ein Befehlszeiger vom Kopf der Warteschlange verschoben, der Befehl wird ausgeführt und der nächste Befehl (es sei denn, es gab einen Sprung oder einen unzulässigen Befehl) wird auf das Ende der Warteschlange geschoben. Doch SPLbewirkt sowohl die nächste Anweisung und der gegebene Zielbefehl (die im Fall von SPL 1, ist auch der nächste Befehl) in der Warteschlange eingeschoben werden.

Dies alles hat zur Folge, dass sich nach SPL 1Ausführung der beiden Befehle nun vier Prozesse in der Warteschlange befinden, von denen der letzte ausgeführt wird MOV. Dies ist gerade genug, um JMNsowohl das SPLs als auch das MOVselbst abzuwischen , und es lässt auch die ptrAnweisungszelle DAT 0, 0ununterscheidbar von dem leeren Kern, der sie umgibt.

(Alternativ hätten wir die ptrAnweisung durch eine Anweisung ersetzen können MOV 1, 1, die MOV 1, 0von den früheren Anweisungen konvertiert wurde , und sich daher selbst gelöscht hätten, genau wie das erste obige Programm.)

Ps. Wenn Sie dieses Programm testen möchten, laden Sie einen Redcode-Simulator (auch bekannt als MARS) herunter . Ich würde entweder CoreWin oder das ehrwürdige pMARS empfehlen , obwohl es auch einige andere gute Simulatoren gibt.

Ilmari Karonen
quelle
Wird dies nicht einfach eine Zugriffsverletzung auslösen?
Danny Varod
12
Zugriffsverletzung? Was für eine seltsame Sache ist das? (Im Ernst, Redcode läuft in einer ziemlich abstrakten VM. Alle Adressierung ist relativ, der Adressraum ist zusammenhängend (und zyklisch) und jede Adresse ist gültig.)
Ilmari Karonen
Kopiert MOV 1, 0 1 in Adresse 0 oder umgekehrt? In allen mir bekannten Assembler-Sprachen ist die Adresse 0 unzulässig (NULL-Adresse).
Danny Varod
4
Die Syntax lautet MOV source, dest. Aber wie gesagt, alle Adressen in Redcode sind relativ, so dass die Adresse 0tatsächlich "die Adresse dieses Befehls" bedeutet, während die Adresse 1tatsächlich "die Adresse dieses Befehls + 1" bedeutet. (Und die absolute Adresse 0 ist nicht in irgendeiner Weise besondere in Redcode sowieso, in der Tat eine interessante Konsequenz der „all relative Adressierung“ Design ist , dass es tatsächlich ist unmöglich für ein Redcode Programm seine eigene absolute Adresse im Kern zu finden! )
Ilmari Karonen
2
Mann, ich bin dir so dankbar. Ich hatte noch nie von Core War gehört.
Siehe auch
32

C

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

Beachten Sie, dass dies kein portabler Code ist. Es funktioniert mit ZOG C auf dem ART DS9000 . Ich glaube, dass der Einsatz von unkonventioneller Rüstung diesen Kodex für diese Herausforderung qualifiziert. Wenn Sie befürchten, dass die Verzögerung für die Auslieferung des Codes nicht sofort eintritt , wenden Sie sich an uns, um Ratschläge zu Präventivschlägen zu erhalten.

Wirkung des Starts

Auf meinem Heimcomputer wird es nicht einmal kompiliert - ich habe nicht die richtigen Treiber und Bibliotheken. Ich habe gehört, dass es beliebte C-Implementierungen gibt, in denen dieses Programm kompiliert und mit weniger spektakulären Effekten ausgeführt wird, aber ich hatte nie den Mut, es zu versuchen.

Gilles 'SO - hör auf böse zu sein'
quelle
2
Beste Antwort, zweifellos!
Vector
3
+1 (0) 1; Zuerst dachte ich, dass @Gilles hier trollt ... aber dann habe ich die ART Inc.-Webseite besucht ... und dann wurde mir klar, wie stark ich trollt wurde!
Vaxquis
30

JavaScript

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

Navigiert einfach zu einer anderen ( leckeren ) Website. :-)

Golf (10 Zeichen):

location=1
Türknauf
quelle
7
mmmm, Eiscreme: P
Volatility
28

C #

Tötet sich selbst, indem jeder Prozess außer sich selbst beendet wird.

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

Um es ein wenig aufzupeppen, könnten wir PInvoke verwenden, TerminateProcessanstatt es zu verwendenProcess.Kill

osvein
quelle
4
+1 für eine sehr unkonventionelle Methode, um alle anderen Dinge zu töten, was dazu führt, dass Ihr eigenes Programm mit dem System zusammenbricht (oder zumindest nehme ich an, dass das die Idee ist?). Ich habe keine C # -Laufzeit auf diesem Computer, aber ich muss fragen ... Beeinträchtigt dies in der Praxis das System oder nur alle laufenden Prozesse? (Ich dachte, dass C # -Programme den Interpreter selbst aufrufen und sich somit nicht auf die Existenz eines bestimmten JIT / CIL-Prozesses verlassen ...). Nochmals, großartiger Job, wenn man über den Tellerrand hinaus denkt (har har) :)
Durchbruch,
4
-1 (wenn ich den Repräsentanten hätte): Das Meta zum Code-Trolling besagt, dass destruktive Antworten nicht zulässig sind, da die Gefahr besteht, dass Leute sie auf ihren eigenen Computern ausprobieren. Siehe den zweiten Punkt
Kevin - Reinstate Monica
Systemprozesse können nicht ohne Administratorrechte beendet werden, nicht wahr?
Sarge Borsch
3
@ Kevin Code-Challenge und Code-Trolling sind unterschiedliche Tags mit unterschiedlichen Regeln.
osvein
3
@ user1981338: Die Frage hatte ursprünglich das Code-Trolling-Tag, wurde jedoch inzwischen herausgeschnitten. Jetzt, da der Tag weg ist, +1.
Kevin - Monica
21

BASH - 12 Zeichen

:(){ :|:&};:

Klassische Gabelbombe. Sperrt den Computer und zwingt den Benutzer (oder Administrator) zum Neustart.

Tyzoid
quelle
5
Langweilig - aber immer noch mein persönlicher Favorit. Ich benutze dies, um Live-Systeme herunterzufahren
s3lph
3
Es startet sich so oft es geht von selbst, das hört nicht auf.
marinus
1
Es werden jedoch so viele Prozesse wie möglich gestartet, bis der Computer abstürzt und das Programm beendet wird
s3lph 29.12.13
14
+1 für das Hinzufügen von Smileys wie :()und:|
ProgramFOX
1
@Kartik: Ohne das erste Leerzeichen wird ein Syntaxfehler angezeigt. Sie können die zweite beseitigen.
Dennis
20

Python (auf alten Laptops)

Auf alten Laptops mit Single-Core-Prozessoren und schlechter Kühlung:

while True:
    print("CPU Temperature rising")

Wenn der Laptop nach einigen Stunden explodiert (oder sich nur ausschaltet), wird das Programm nicht ausgeführt.

(Um optimale Ergebnisse zu erzielen, wickeln Sie den Laptop in eine Decke oder Ähnliches.)

MadTux
quelle
18

Rubin

kills der laufende ruby ​​/ irb-prozess auf * nix.

`kill #{$$}`
daniero
quelle
2
Ich mag die Eleganz dieses. +1
Türklinke
18

Apple 2 Basic

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

Es überschreibt eine seiner Anweisungen mit einem END.

Marinus
quelle
Wie funktioniert das?
Johannes
5
@Johannes: In Applesoft BASIC wird das Programm in tokenisierter Form im Speicher abgelegt. Da es keinen Betriebssystem- oder Speicherschutz gibt, wird er immer am selben Ort gespeichert, und nichts hindert Sie daran, in diesen Speicher zu schreiben. Der erste POKEschreibt also ein ENDToken über das PRINTToken, und der zweite POKEschreibt einen Befehlsabschluss über das erste ". Wenn die GOTOausgeführt wird, endet es angerannt ENDstatt PRINTund das Programm endet.
Marinus
14

In der Montage würde wahrscheinlich so etwas funktionieren:

jmp 0

Ich erinnere mich, dass diese Kompilierung tatsächlich DOS funktionierte. Damals wurde der Computer neu gestartet.

Martijn Courteaux
quelle
versuche es mit ret; Eigentlich werde ich das als Antwort posten: P
Julien Lebot
retf wird funktionieren, das habe ich bereits in einer Antwort angegeben :) Es bricht ab, weil die Speichersegmentierung auf modernen Betriebssystemen funktioniert (oder nicht funktioniert, sollte ich sagen)
chbaker0
»Jmp 0« funktioniert unter DOS, weil die ersten zwei Bytes eines Codesegments CD 20 waren oder 'INT 20', der Code für das Exit-Programm. »0 drücken; ret «hätte den gleichen Effekt.
Daniel
13

PHP

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

Effekte:
Löscht Ihre beschissene Skriptdatei und beendet dann Ihr Programm.
Wirf einen dieser bösen Jungs in eine Codebasis, um die Leute zu verwirren.

donutdan4114
quelle
Dies ist keine gültige PHP-Syntax. Sie versuchen, eine Funktion zu definieren, quitaber die Parameterliste ist auszuführender Code. Beim Ausführen wird ein Analysefehler angezeigt.
Emil Vikström
@ EmilVikström - Jetzt behoben.
donutdan4114
12

C 9 Zeichen

Kompiliert mit gccund mit anderen Compilern, denen kleine Details mainnichts ausmachen, weil sie keine Funktion sind.
Funktioniert auf x86Plattformen - das Programm wird sofort beendet.

main=195;

195 ist der Operationscode der retAnweisung.

ugoren
quelle
4
Segfaults für mich. mainbefindet sich in, .dataweil es ein int ist, nicht in .text, und .datawird in eine nicht ausführbare Seite geladen.
1.
10

Ich wollte das schon immer irgendwo posten, ich denke es passt hier, obwohl es bereits eine akzeptierte Antwort gibt.

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

Dies funktioniert auf allen Post 4.3BSD-Systemen und anderen Systemen, die revokeauf die gleiche Weise implementiert werden. Linux funktioniert nicht, obwohl es einen Prototyp dafür gibt, MacOS hat dies in der Vergangenheit getan, sondern gibt nur Fehler in den letzten Versionen zurück.

revokenimmt einen Pfad zu einer Datei und zerstört gewaltsam alle Verweise auf diese Datei. Dies schließt alle Speicherzuordnungen dieser Datei ein, auch die ausführbare Datei selbst. Offensichtlich müssen Sie das Programm mit einem Pfad dazu starten. Dies funktioniert nicht, wenn es sich zufällig in PATH befindet.

Eine Variante davon, die auf den meisten Unix-ähnlichen Systemen funktionieren sollte, ist:

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

Die Zuordnung der Seite wird einfach aufgehoben, mainsodass der Aufruf munmapvon return nirgendwo mehr Platz hat, zu dem er zurückkehren kann. Es besteht eine geringe Wahrscheinlichkeit, dass sich der Funktionsaufruf munmapnur an einer Seitengrenze befindet und die Rückgabe erfolgreich ist. Um sicherzugehen, dass dies funktioniert, müssen wir wahrscheinlich zuerst versuchen, zwei Seiten zu trennen.

Und natürlich eine Variation zum selben Thema:

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

Heben Sie einfach die Zuordnung des Stapels auf, damit wir nirgendwo mehr zurückkehren können. Gleiche Einschränkung wie beim Aufheben der Zuordnung main- wir müssen möglicherweise zwei Seiten aufheben, außer dass wir uns daran erinnern müssen, dass der Stapel wahrscheinlich größer wird (es sei denn, Sie verwenden PA-RISC oder eine andere seltsame Architektur wie diese).

Eine andere Möglichkeit, den Teppich unter den eigenen Füßen hervorzuziehen:

#include <sys/resource.h>

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

Es hängt vom Betriebssystem ab, wie das System mit einem CPU-Limit von 0 Sekunden umgeht und wie oft die CPU-Zeit abgerechnet wird. MacOS bricht den Prozess sofort ab, Linux benötigt die while-Schleife, ein anderes System, das ich ausprobiert habe, hat trotz einer Beschränkung von einer Sekunde und einer while-Schleife nichts unternommen, ich habe nicht weiter debuggt.

Kunst
quelle
9

Sch

sudo kill -SEGV 1

Sofortige Panik unter Linux. Zerstört alle Prozesse, einschließlich sich selbst

Cmd

pskill csrss.exe

Sofortiger blauer Bildschirm unter Windows. Beendet die Client/Server Runtime SubSystem. Pskill muss installiert sein.

MultiplyByZer0
quelle
Würde das killall initauch funktionieren?
S3LPH
1
@the_Seppi 1. Nur ein Benutzer auf Root-Ebene kann Signale an init senden. 2. Init wird nur dann eine innere Panik auslösen, wenn es das Signal 11 empfängt (Segmentierungsfehler)
MultiplyByZer0
OK, danke ... Wissen Sie, was passiert, wenn Sie verwendensudo killall init
S3LPH
1
@the_Seppi Ja, ich habe es schon versucht. Init ignoriert es, da init entscheiden kann, ob es das Signal empfängt oder nicht, und ignoriert SIGKILL daher vollständig. unix.stackexchange.com/questions/7441/…
MultiplyByZer0
8

In C (Compatible Windows / Linux / (wahrscheinlich auch Unix / Freed BSD)):

main;

Anwendungsbeispiel:

Unter Windows kompilieren mit:

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

Und Linux:

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

Angenommen, der Compiler ist installiert und befindet sich in der aktuellen PATH-Variablen.

BEARBEITEN: Technisch wird unter Linux eine (vom Prozessor ausgelöste) Ausnahme ausgelöst, unter Windows gibt es jedoch keine solche Meldung. Daher ist dieser Eintrag wahrscheinlich nicht gültig. aber ich finde es cool: P

BEARBEITEN: In x86 Assembler (mit NAsm / YAsm)

global s
s:
    ret

Kompilieren mit:

(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

Leider wird auf diese Weise auch ein Core-Dump unter Linux erstellt, weshalb es meiner Meinung nach der C-Methode funktional entspricht. außer effizienter.

Julien Lebot
quelle
1
Beeindruckend! Ich habe dies nur mit kompiliert -Wall -Wextra -std=c99 -pedanticund es gibt überhaupt keine Warnungen.
ldrumm
Eigentlich wollte ich das sagen, habe mich aber dagegen entschieden, weil es eine Kopie meiner Lösung für ein anderes Problem wäre ( codegolf.stackexchange.com/a/8778/3103 ).
Konrad Borowski
7

Mit Haskell die Dinge buchstäblich albern nehmen:

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
Swish
quelle
6

Python


Mit dem multiprocessingModul können wir einen anderen Thread erzeugen, dessen Aufgabe es ist, über eine Warteschlange mit dem ursprünglichen Prozess zu kommunizieren und ihm mitzuteilen, wann er beendet werden soll:

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()
Durchbruch
quelle
6

ANSI C

Ohne Codeoptimierung wird das folgende Programm so schnell beendet - es kann tatsächlich nicht gestartet werden, obwohl es in ein gültiges Programm kompiliert wurde

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

char tooLong[0x7CFFFFFF];

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

Dies kann systemabhängig sein - Kommentar, wenn Sie es starten können.

Johannes
quelle
"Abbruch durch Ausnahmen wird nicht mehr akzeptiert!" und dies schließt Fehler wegen zu wenig Arbeitsspeicher ein
John Dvorak
2
@ JanDvorak Es gibt Unterschiede zwischen Fehlern und Ausnahmen .
syb0rg
Ich glaube jedoch, dass die Regel beides umfasst. Kann der Fragesteller das klären? Und nein, ich denke nicht, dass eine Java-spezifische SO-Frage eine gute Referenz ist, insbesondere wenn Sie eine C-Lösung verteidigen.
John Dvorak
9
Das Programm löst weder einen Fehler aus, noch verursacht es einen Fehler innerhalb des Programms. Das System kann damit nicht umgehen.
Johannes
6

Okay. Wenn das einfache Aufrufen System.exitin Java nicht zulässig ist, wie wäre es dann, wenn Sie es über die Reflektion eines anderen Threads aufrufen?

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

Sucht nach der exit-Methode, erzeugt einen neuen Thread und zählt herunter, bis dieser Thread den Prozess abbricht, indem exit über Reflection aufgerufen wird.

David Conrad
quelle
Zählt runter? Sieht so aus, als ob es an mir liegt.
Justin
1
Äh, ja, guter Punkt. Ich hätte sagen sollen, dass es zählt, oder nur gesagt, dass es zählt, bis es endet.
David Conrad
6

x86-Maschinensprache, 1 Zeichen

Normalerweise können Sie eine ausführbare Datei aus einer RET-Anweisung erstellen

\xC3 
user155406
quelle
4
Wie ist das unkonventionell ?!
Aditsu
6

C (Linux)

Selbstmord-Version

Sendet einen SIGKILL an sich.

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

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

    printf("Not killed");
}

Version "Tu quoque mi fili"

Gabeln, dann tötet der Sohn den Vater.

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

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

    printf("Not killed");
}
cpri
quelle
5

Perl

...

Das ist alles.


Erläuterung: Die Ausnahme wird Unimplementedausgelöst und sofort beendet.

PhiNotPi
quelle
Erklärung hinzugefügt.
PhiNotPi
3
Ich weiß nicht, Ausnahmen sind langweilig.
6
Invalif wegen Herausforderung Anpassung: keine Ausnahmen
S3LPH
Ich bin nur noch nicht dazu gekommen, eine andere Antwort zu schreiben.
PhiNotPi
5

Batch & Debug

Ein Oldie aber Goodie, funktioniert auf DOS-Rechnern für einen sofortigen Systemneustart. Ein Bonus ist, dass es sich um ein Skript handelt, das von zwei verschiedenen, inkompatiblen Interpreten interpretiert werden soll.

reset.bat

goto start

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

Die Batchdatei-Interpretation überspringt die Anweisungen, die für das Debuggen vorgesehen sind, und führt sich selbst dem Debuggen zur Interpretation zu. Die leere Zeile danach gotowird benötigt, um den Fehler zu löschen, der sich daraus debugergibt, dass ein unbekannter Befehl (goto) eingegeben wurde.

Randalieren
quelle
1
Früher habe ich das Gleiche gemacht wie Dez Axt. Axt schieben; drücke bx; retf
moopet 31.12.13
3

Java

Der folgende Code ist nicht getestet und funktioniert nur auf einigen Plattformen.

public class Quitter
{
       public static void main ( String [ ] args )
       {
             Process process = Runtime . getRuntime ( ) . exec ( "reboot" ) ;
       }
}
Emory
quelle
45
Was ist mit diesem schrecklichen Leerzeichen
Türknauf
7
Unter UNIX müsste es sein sudo reboot, unter Windowsshutdown /r /t 0
s3lph 28.12.13
2
Unter UNIX müssen Sie dieses Programm nur mit sudo ausführen, nicht mit dem Befehl, den Sie ausführen möchten.
Johannes Kuhn
1
@ the_Seppi, @ JohannesKuhn wie gesagt, es funktioniert nur auf einigen Plattformen und ich nahm an, Sie würden es so aufrufen sudo java Quitter.
Emory
3
-1 NICHT GENUG WHITESPACE !!!
Vaxquis
3

Power Shell

get-process | stop-process -force

Speichern Sie dies als 'lastresort.ps1' und es sollte den Trick machen.

Wenn Sie auf Probleme stoßen, bei denen das Skript aufgrund einer dummen Richtlinie nicht ausgeführt wird, geben Sie Folgendes ein, bevor Sie das Skript ausführen:

Set-ExecutionPolicy Unrestricted
ein Freak
quelle
Funktioniert gut von der Kommandozeile aus, ohne auch als Skript zu speichern.
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!!!
Timtech
quelle
3

Python (eine einzeilige Alternative zum OP)

Ich dachte, es gäbe keine wirklich bessere Python-Antwort als das, was das OP vorschlug, aber ich mochte nicht, wie viele Zeilen es waren. Deshalb tun Sie genau so, wie das OP es tat, aber in einer Zeile:

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] ]))

Sie können dies zu einer Funktion machen und sie erledigt die Arbeit für Sie.

ein Freak
quelle
3

Meine eigene Idee, nicht teilzunehmen

TIGCC (für Texas Instrumens TI-89, TI-89 Titan, TI-92 +, TI-V200)

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

TI-Basic für die gleichen Rechner

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

Was das Programm macht: Zuerst löscht es sich aus dem RAM. (Legen Sie es nicht in das ROM oder es funktioniert nicht ...) Es kann weiterhin ausgeführt werden, da bei der Ausführung eine Kopie des Programms erstellt und ausgeführt wird. asm(trap #2);Ruft den ASM-Befehl auf 4E424E750000, bei dem es sich um den Befehl zum Zurücksetzen des Rechners, zum Löschen des Arbeitsspeichers (Flash-ROM bleibt unberührt) und zum erneuten Installieren aller Anwendungen handelt.

EDIT: Habe gerade die Basic Version getestet. Es kann sich nicht selbst löschen ...

s3lph
quelle
3

MS-DOS .com-Format

Es schreibt ungültige Anweisungen (FFFF) in den Speicher und führt sie dann aus, wodurch NTVDM abstürzt.

Hexadezimal

B8 FF FF A3 06 01

Assemblersprache Debug.exe

MOV AX, FFFF
MOV [0106],AX
Handwerkstext
quelle