Tantangan: Tulis kode yang keluar sendiri [ditutup]

39

Saya sedang mencari (apakah saya?) Untuk sepotong kode yang segera berhenti - dengan cara yang benar-benar tidak konvensional.

Ini tidak berarti: System.exit((int) 'A');(Jawa).

Itu mungkin berarti:

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

Jawaban yang paling banyak menang menang! Semua bahasa, semua arsitektur.

Sunting: Berhenti dengan melempar pengecualian tidak akan diterima lagi!

s3lph
sumber
3
Tapi itu tidak konvensional untuk mengakhiri eksekusi ... Yah, ini adalah alternatif untuk exit(), tetapi masih merupakan fitur yang diimplementasikan ...
s3lph
13
Ini bukan kode-trolling - kami tahu kami menginginkan jawaban aneh dari yang ini.
Liam Dawson
6
Apakah mematikan sistem bekerja?
Hosch250
8
Saya pernah secara tidak sengaja menyebabkan kartu jaringan ke DMA melalui sistem operasi. Ketika itu terjadi, Anda langsung kembali ke BIOS, me-reboot.
Ben Jackson
3
Saya merasa seperti Shannon mengalahkan kami di sini;)
terang

Jawaban:

44

bash, 6 karakter

exec [

execmenggantikan proses saat ini dengan sesuatu yang lain. [adalah perintah terpendek yang dapat saya temukan yang tidak berbahaya (ini alias untuk test)

Dennis Kaarsemaker
sumber
Pengecualian lain?
Johannes Kuhn
Tidak, hanya exec'ing [perintah :)
Dennis Kaarsemaker
1
mengapa ini bekerja? apa yang dilakukan?
s3lph
@the_Seppi itu menggantikan proses saat ini dengan [(alias tes)
Timtech
~ $ echo $PATH/?-> /bin/X /bin/[ /bin/w. Kerang ikan memberi saya dua perintah lain. wmenarik menurut saya.
Konrad Borowski
46

Pesta

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

Hentikan program secepat yang dapat bereaksi pengguna ;-)

Daniel
sumber
10
Putus asa karena itu membuat saya tertawa.
Michael Stern
5
Lebih baik tidak menjalankannya di Linux.
kenorb
1
dd: / dev / hda: not found
Joshua
39

Redcode

(Latar Belakang: Redcode adalah bahasa pseudo-assembly yang digunakan dalam game pemrograman Core War yang diperkenalkan oleh AK Dewdney pada tahun 1984. Ini biasanya menggunakan banyak kode modifikasi diri. Saya menulis tutorial kecil yang menyenangkan tentang pemrograman Redcode beberapa tahun yang lalu. )

MOV 1, 0

Program instruksi tunggal ini tidak hanya membunuh dirinya sendiri, tetapi juga menghapus kode programnya sendiri dari memori, tanpa meninggalkan jejaknya dalam memori.

Membosankan, katamu? Lagipula, program di atas akan mati juga, bahkan jika belum ditimpa kodenya. OK, ini salah satu yang membersihkan seluruh inti sebelum akhirnya menyeka dirinya sendiri dan sekarat:

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

Dua instruksi pertama benar-benar melakukan sebagian besar pekerjaan: itu hanya copy / lompatan sederhana yang menyalin sel instruksi kosong (yang diinisialisasi ke DAT 0, 0) setelah akhir program ke setiap sel berikutnya (menggunakan mode pengalamatan tidak langsung pasca kenaikan bertahap) >), sampai pointer akhirnya membungkus ke awal memori dan menimpa MOVdi dalam loop itu sendiri. Setelah itu terjadi, JMN(JuMp jika Bukan nol) mendeteksi dan jatuh.

Masalahnya adalah bahwa ini masih membiarkan JMNdirinya sendiri tidak dihapus. Untuk menyingkirkan itu, kita perlu lagi MOVuntuk menyeka JMN... tapi itu berarti kita belum perlu lagi MOVuntuk menyeka itu MOV , dan sebagainya. Untuk membuat seluruh program hilang tanpa jejak, kita harus entah bagaimana mengatur satu MOVinstruksi untuk menghapus keduanya dan setidaknya satu instruksi lainnya.

Di situlah SPLmasuk - itu adalah salah satu opcode paling aneh di Redcode. Pada dasarnya, ini adalah instruksi "Cabang Kedua Cara". Anda lihat, alih-alih register "penghitung program" sederhana, seperti CPU normal lainnya, Redcode VM memiliki "proses antrian": daftar petunjuk yang berurutan untuk instruksi yang akan dieksekusi. Biasanya, pada setiap siklus, penunjuk instruksi digeser dari kepala antrian, instruksi dieksekusi dan instruksi berikutnya (kecuali ada lompatan atau instruksi ilegal) didorong ke ekor antrian. Tetapi SPLmenyebabkan kedua instruksi berikutnya dan instruksi target yang diberikan (yang, dalam kasus SPL 1, juga instruksi berikutnya) untuk didorong ke antrian.

Hasil dari semua ini adalah bahwa, setelah dua SPL 1instruksi telah dieksekusi, sekarang ada empat proses dalam antrian, semua tentang eksekusi yang terakhir MOV. Ini hanya cukup untuk menghapus JMN, baik SPLdan MOVsendiri, dan juga meninggalkan ptrsel instruksi DAT 0, 0- tidak dapat dibedakan dari inti kosong yang mengelilinginya.

(Atau, kita bisa mengganti ptrinstruksi dengan MOV 1, 1, yang akan dikonversi menjadi MOV 1, 0dengan instruksi sebelumnya, dan akan menghapus sendiri, seperti program pertama di atas lakukan.)

Ps. Jika Anda ingin menguji program ini, unduh simulator Redcode (alias MARS). Saya akan merekomendasikan baik CoreWin atau YM pMARS , meskipun ada beberapa simulator baik lainnya juga.

Ilmari Karonen
sumber
Bukankah ini hanya pelanggaran akses?
Danny Varod
12
Pelanggaran akses? Hal aneh apa itu? (Serius, Redcode berjalan dalam VM yang cukup abstrak. Semua pengalamatan adalah relatif, ruang alamat bersebelahan (dan siklik) dan setiap alamat valid.)
Ilmari Karonen
Apakah MOV 1, 0 menyalin 1 ke alamat 0 atau sebaliknya? Dalam semua bahasa assembler saya tahu alamat 0 adalah ilegal (alamat NULL).
Danny Varod
4
Sintaksnya adalah MOV source, dest. Tetapi seperti yang saya katakan, semua pengalamatan dalam Redcode adalah relatif, sehingga alamat 0sebenarnya berarti "alamat instruksi ini", sedangkan alamat 1sebenarnya berarti "alamat instruksi ini +1". (Dan alamat absolut 0 sama sekali tidak istimewa dalam Redcode; pada kenyataannya, satu konsekuensi menarik dari desain "semua alamat relatif" adalah bahwa sebenarnya tidak mungkin bagi program Redcode untuk menemukan alamat absolutnya sendiri di dalam inti! )
Ilmari Karonen
2
Man, aku sangat berterima kasih padamu. Saya belum pernah mendengar tentang Perang Inti.
seequ
32

C

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

Perhatikan bahwa ini bukan kode portabel. Ini bekerja dengan ZOG C pada ART DS9000 . Saya percaya bahwa penggunaan persenjataan yang tidak konvensional memenuhi syarat kode ini untuk tantangan ini. Jika Anda khawatir keterlambatan yang diperlukan untuk sepotong kode untuk mengirimkan payloadnya tidak memenuhi syarat segera , hubungi kami untuk saran tentang serangan pendahuluan.

efek peluncuran

Di mesin rumah saya, bahkan tidak dapat dikompilasi - saya tidak memiliki driver dan perpustakaan yang tepat. Saya pernah mendengar bahwa ada implementasi C yang populer di mana program ini mengkompilasi dan menjalankan efek yang kurang spektakuler, tetapi saya tidak pernah berani mencoba.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Jawaban terbaik, tangan ke bawah!
Vektor
3
+1. (0) 1; pada awalnya, saya pikir @Gilles sedang memancing di sini ... tapi kemudian saya memeriksa halaman web ART Inc. ... dan saat itulah saya menyadari betapa beratnya saya dikendalikan!
vaxquis
30

JavaScript

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

Cukup bernavigasi ke situs web ( lezat ) yang berbeda . :-)

Golf (10 karakter):

location=1
Gagang pintu
sumber
7
mmmm, es krim: P
Volatilitas
28

C #

Membunuh dirinya sendiri dengan membunuh setiap proses kecuali dirinya sendiri.

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

Untuk sedikit meningkatkannya, kita bisa TerminateProcessmenggunakan PInvoke alih-alih menggunakanProcess.Kill

osvein
sumber
4
Memberi +1 untuk metode yang sangat tidak konvensional membunuh setiap hal lainnya, sehingga menyebabkan program Anda sendiri mati dengan sistem (atau setidaknya, saya menganggap itu idenya?). Saya tidak memiliki runtime C # di mesin ini, tetapi saya harus bertanya ... Dalam praktiknya, apakah ini akhirnya menurunkan sistem atau hanya semua proses yang berjalan? (Saya pikir program C # memanggil penerjemah sendiri, sehingga tidak mengandalkan keberadaan proses JIT / CIL tertentu ...). Sekali lagi, pekerjaan hebat berpikir 'di luar kotak' (har har) yang satu ini :)
Terobosan
4
-1 (jika saya punya perwakilan): Meta pada trolling kode mengatakan bahwa jawaban yang merusak tidak diperbolehkan karena risiko orang mencobanya di mesin mereka sendiri. Lihat peluru kedua dalam daftar pembatasan: codegolf.stackexchange.com/tags/code-trolling/info
Kevin
Proses sistem tidak dapat dibunuh tanpa hak admin, bukan?
Sarge Borsch
3
@Kevin code-challenge dan code-trolling adalah tag berbeda dengan aturan berbeda.
osvein
3
@ user1981338: pertanyaan awalnya memiliki tag troll kode, tetapi sejak itu telah diedit. Sekarang setelah tag hilang, +1.
Kevin - Reinstate Monica
21

BASH - 12 karakter

:(){ :|:&};:

Forkbomb klasik. Mengunci komputer dan memaksa pengguna (atau admin) untuk reboot.

Tyzoid
sumber
5
Membosankan - tetapi tetap menjadi favorit pribadi saya. Saya menggunakan ini untuk mematikan sistem langsung
s3lph
3
Itu mulai sendiri sebanyak yang dia bisa, itu tidak berhenti.
marinus
1
Tetapi itu akan memulai proses sebanyak mungkin sampai komputer crash dan karena itu berhenti dari program
s3lph
14
+1 untuk menambahkan smiley seperti :()dan:|
ProgramFOX
1
@Kartik: Tanpa spasi pertama, Anda akan mendapatkan kesalahan sintaksis. Anda bisa menghilangkan yang kedua.
Dennis
20

Python (pada laptop lama)

Pada laptop lama dengan prosesor single core dan pendingin yang buruk:

while True:
    print("CPU Temperature rising")

Ketika laptop meledak (atau hanya mati) setelah beberapa jam, program tidak akan berjalan.

(Untuk hasil terbaik, bungkus laptop dengan selimut atau sesuatu)

MadTux
sumber
18

Rubi

kills proses ruby ​​/ irb yang berjalan pada * nix.

`kill #{$$}`
daniero
sumber
2
Saya suka keanggunan yang satu ini. +1
Gagang Pintu
18

Apple 2 Basic

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

Ini menimpa salah satu instruksinya dengan END.

marinus
sumber
Bagaimana cara kerjanya?
Johannes
5
@ Johnannes: di Applesoft BASIC, program disimpan dalam bentuk tokenized di memori. Karena tidak ada OS atau perlindungan memori, selalu tersimpan di tempat yang sama dan tidak ada yang menghentikan Anda dari menulis ke memori itu. Jadi yang pertama POKEmenulis ENDtoken di atas PRINTtoken, dan yang kedua POKEmenulis terminator perintah atas yang pertama ". Ketika GOTOdijalankan, itu berakhir berjalan dan ENDbukannya PRINTprogram berakhir.
marinus
14

Dalam pertemuan, sesuatu seperti ini mungkin akan berfungsi:

jmp 0

Saya ingat bahwa kompilasi ini benar-benar berfungsi DOS. Saat itu, itu reboot komputer.

Martijn Courteaux
sumber
coba ret; Sebenarnya saya akan memposting ini sebagai jawaban: P
Julien Lebot
retf akan bekerja, saya sudah memasukkannya ke dalam jawaban :) Membunuhnya karena cara segmentasi memori berfungsi (atau tidak berfungsi, harus saya katakan) pada sistem operasi modern
chbaker0
»Jmp 0« bekerja dengan DOS, karena dua byte pertama dari segmen kode adalah CD 20, atau 'INT 20' yang merupakan kode untuk keluar dari programm. »Tekan 0; ret «yang akan memiliki efek yang sama.
Daniel
13

PHP

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

Efek:
Menghapus file skrip jelek Anda dan kemudian membunuh program Anda.
Lemparkan salah satu dari anak nakal ini ke dalam basis kode untuk membingungkan orang.

donutdan4114
sumber
Ini bukan sintaks PHP yang valid. Anda mencoba mendefinisikan suatu fungsi quittetapi daftar parameter adalah kode untuk dijalankan. Saya mendapatkan kesalahan parse ketika mencoba menjalankannya.
Emil Vikström
@ EmilVikström - Diperbaiki sekarang.
donutdan4114
12

C, 9 karakter

Kompilasi dengan gccdan kompiler lain yang tidak keberatan dengan detail kecil seperti maintidak berfungsi.
Bekerja pada x86platform - program segera keluar.

main=195;

195 adalah opcode retinstruksi.

ugoren
sumber
4
Segfaults untuk saya. mainterletak di .datakarena int, bukan di .text, dan .datadimuat ke halaman yang tidak dapat dieksekusi.
mniip
10

Saya selalu ingin memposting ini di suatu tempat, saya kira cocok di sini meskipun sudah ada jawaban yang diterima.

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

Ini berfungsi pada sistem pos 4.3BSD dan lainnya yang menerapkan revokedengan cara yang sama. Linux tidak meskipun ada prototipe untuk itu, MacOS melakukannya di masa lalu tetapi hanya mengembalikan kesalahan di versi terbaru.

revokemengambil jalur ke file dan secara paksa menghancurkan semua referensi ke file itu. Ini termasuk pemetaan memori file itu, bahkan yang dapat dieksekusi itu sendiri. Jelas, Anda harus memulai program dengan path ke sana, ini tidak akan berhasil jika kebetulan berada di PATH.

Variasi dari hal ini yang seharusnya bekerja pada kebanyakan sistem mirip-unix adalah:

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

Kami hanya menghapus peta halaman yang dipetakan mainsehingga ketika panggilan untuk munmapkembali, ia tidak memiliki tempat untuk kembali. Ada sedikit peluang fungsi dipanggil munmaphanya pada batas halaman dan kembalinya akan berhasil, jadi untuk memastikan ini berfungsi, kita mungkin harus mencoba untuk menghapus peta dua halaman terlebih dahulu.

Dan tentu saja, variasi pada tema yang sama:

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

Hapus peta tumpukan sehingga kami tidak punya tempat untuk kembali. Peringatan yang sama dengan unmapping main- kita mungkin perlu memetakan dua halaman, kecuali bahwa kita harus ingat bahwa tumpukan mungkin tumbuh turun (kecuali Anda berada di PA-RISC atau beberapa arsitektur aneh lainnya seperti itu).

Cara lain untuk menarik karpet dari bawah kaki Anda sendiri:

#include <sys/resource.h>

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

Ini tergantung pada sistem operasi dengan bagaimana sistem menangani batas cpu 0 detik dan seberapa sering perhitungan waktu cpu dilakukan. MacOS membunuh proses dengan segera, Linux membutuhkan loop sementara, sistem lain yang saya coba tidak melakukan apa-apa bahkan dengan batas satu detik dan loop sementara, saya tidak men-debug lebih lanjut.

Seni
sumber
9

SH

sudo kill -SEGV 1

Panic kernal instan di Linux. Hancurkan semua proses, termasuk dirinya sendiri

Cmd

pskill csrss.exe

Layar biru instan di Windows. Mengakhiri Client/Server Runtime SubSystem. Pskill harus diinstal.

MultiplyByZer0
sumber
killall initJuga akan bekerja
s3lph
1
@the_Seppi 1. Hanya pengguna tingkat root yang dapat mengirim sinyal ke init 2. Init hanya akan menyebabkan panik kernal jika menerima sinyal 11 (kesalahan segmentasi)
MultiplyByZer0
OK terima kasih ... Apakah Anda tahu apa yang terjadi jika Anda menggunakansudo killall init
s3lph
1
@the_Seppi Ya, saya lakukan, saya pernah mencobanya sebelumnya. Init mengabaikannya, karena init dapat memutuskan apakah ia menerima sinyal atau tidak, sehingga ia sepenuhnya mengabaikan SIGKILL. unix.stackexchange.com/questions/7441/…
MultiplyByZer0
8

Dalam C (Kompatibel Windows / Linux / (mungkin Unix / Freed BSD juga)):

main;

Contoh penggunaan:

Di bawah kompilasi Windows dengan:

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

Dan Linux:

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

Dengan asumsi kompiler diinstal dan dalam variabel PATH saat ini.

EDIT: Secara teknis ia melempar pengecualian (dimunculkan oleh prosesor) di Linux, tetapi tidak ada pesan seperti itu di Windows. Jadi entri ini mungkin tidak valid; namun saya pikir itu keren: P

EDIT: Di assembler x86 (menggunakan NAsm / YAsm)

global s
s:
    ret

Kompilasi dengan:

(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

Sayangnya cara ini juga menghasilkan dump inti di linux, jadi saya percaya ini secara fungsional setara dengan metode C; kecuali lebih efisien.

Julien Lebot
sumber
1
Wow! Saya baru saja menyusun ini dengan -Wall -Wextra -std=c99 -pedanticdan tidak ada peringatan sama sekali.
ldrumm
Saya benar-benar ingin meletakkan ini, tetapi memutuskan, karena itu akan menjadi duplikat dari solusi saya untuk masalah yang berbeda ( codegolf.stackexchange.com/a/8778/3103 ).
Konrad Borowski
7

Mengambil hal-hal secara harfiah dengan cara konyol dengan Haskell:

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
desir
sumber
6

Python


Menggunakan satu multiprocessingmodul , kita dapat menelurkan thread lain yang tugasnya adalah untuk berkomunikasi dengan proses asli melalui antrian, mengatakan ketika berhenti:

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()
Penerobosan
sumber
6

ANSI C

Tanpa optimasi kode, program berikut berhenti dengan sangat cepat - sebenarnya tidak dapat diluncurkan meskipun dikompilasi menjadi program yang valid

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

char tooLong[0x7CFFFFFF];

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

ini mungkin bergantung pada sistem - komentar jika Anda dapat meluncurkannya.

Johannes
sumber
"Berhenti dengan melempar pengecualian tidak akan diterima lagi!" dan ini termasuk kesalahan kehabisan memori
John Dvorak
2
@ JanDvorak Ada perbedaan antara kesalahan dan pengecualian .
syb0rg
Saya percaya aturan itu mencakup keduanya. Bisakah penanya menjelaskan? Dan tidak, saya tidak berpikir pertanyaan SO khusus Java adalah referensi yang baik, terutama ketika Anda membela solusi C.
John Dvorak
9
Program tidak melakukan kesalahan atau menyebabkan kesalahan dalam program. Sistem tidak bisa mengatasinya.
Johannes
6

Baik. Jika hanya menelepon System.exittidak diizinkan di Jawa, bagaimana kalau memanggilnya melalui refleksi dari utas lainnya?

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

Mencari metode keluar, menumbuhkan utas baru, dan menghitung mundur hingga utas itu membunuh proses dengan memanggil keluar melalui refleksi.

David Conrad
sumber
Hitung mundur? Sepertinya itu penting bagiku.
Justin
1
Er, ya, poin bagus. Saya seharusnya mengatakan menghitung, atau hanya mengatakan bahwa itu menghitung sampai keluar.
David Conrad
6

bahasa mesin x86, 1 karakter

Anda biasanya dapat membuat executable dapat dijalankan dari satu instruksi RET

\xC3 
pengguna155406
sumber
4
Bagaimana itu tidak konvensional ?!
aditsu
6

C (Linux)

Versi bunuh diri

Mengirimkan SIGKILL ke dirinya sendiri.

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

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

    printf("Not killed");
}

Versi "Tu quoque mi fili"

Garpu, lalu putranya membunuh ayah.

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

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

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

Perl

...

Itu semuanya.


Penjelasan: Ini melempar pengecualian Unimplementeddan segera keluar.

PhiNotPi
sumber
Penjelasan tambahan.
PhiNotPi
3
Saya tidak tahu, pengecualian itu membosankan.
6
Tidak valid karena tantangan adaptasi: tidak ada pengecualian
s3lph
Saya hanya belum sempat menulis jawaban lain.
PhiNotPi
5

Batch & Debug

Sebuah oldie but goodie, bekerja pada mesin DOS untuk reboot sistem instan. Bonus dalam hal ini adalah satu skrip yang dimaksudkan untuk ditafsirkan oleh dua penafsir yang berbeda dan tidak kompatibel.

reset.bat

goto start

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

Interpretasi file batch melompati instruksi yang dimaksudkan untuk debug, dan mengumpankan dirinya ke debug untuk interpretasi. Baris kosong setelah gotodiperlukan untuk menghapus kesalahan dalam debughasil itu karena itu diberi perintah yang tidak diketahui, yaitu goto.

Kerusuhan
sumber
1
Saya biasa melakukan hal yang sama dengan dec ax; mendorong kapak; dorong bx; retf
moopet
3

Jawa

Kode di bawah ini tidak diuji dan hanya akan berfungsi pada beberapa platform.

public class Quitter
{
       public static void main ( String [ ] args )
       {
             Process process = Runtime . getRuntime ( ) . exec ( "reboot" ) ;
       }
}
emory
sumber
45
Ada apa dengan ruang putih yang menghebohkan itu
Doorknob
7
Pada UNIX itu harus sudo reboot, pada Windowsshutdown /r /t 0
s3lph
2
Pada UNIX Anda hanya perlu menjalankan program itu dengan sudo, bukan perintah yang ingin Anda jalankan.
Johannes Kuhn
1
@ the_Seppi, @ JohannesKuhn seperti saya katakan itu hanya berfungsi pada beberapa platform dan saya berasumsi Anda akan memintanya seperti sudo java Quitter.
emory
3
-1 TIDAK CUKUP WHITESPACE !!!
vaxquis
3

Powershell

get-process | stop-process -force

Simpan ini sebagai 'lastresort.ps1' dan itu harus melakukan trik.

Jika Anda mengalami masalah dengan skrip tidak dijalankan karena beberapa kebijakan bodoh, ketikkan ini sebelum menjalankan skrip:

Set-ExecutionPolicy Unrestricted
orang aneh
sumber
Bekerja dengan baik dari baris perintah tanpa menyimpan sebagai skrip juga.
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
sumber
3

Python (alternatif satu baris ke OP)

Saya pikir sebenarnya tidak ada jawaban Python yang lebih baik daripada yang disarankan OP, tapi saya tidak suka bagaimana itu begitu banyak baris, jadi inilah cara Anda melakukan persis seperti yang dilakukan OP tetapi dalam satu baris:

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

Anda dapat membuat ini berfungsi dan itu akan melakukan pekerjaan untuk Anda.

orang aneh
sumber
3

Ide saya sendiri, tidak ikut

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

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

TI-Basic untuk kalkulator yang sama

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

Apa yang dilakukan oleh program: Pertama menghapus sendiri dari RAM. (Jangan menaruhnya di ROM atau tidak akan berfungsi ...) Itu masih bisa berjalan karena pada pelaksanaan salinan program dibuat dan dijalankan. asm(trap #2);memanggil perintah ASM4E424E750000 , yang merupakan perintah untuk mengatur ulang kalkulator, hapus RAM-nya (Flash ROM tidak tersentuh) dan instal ulang semua aplikasi.

EDIT: Baru saja menguji versi Basic. Itu tidak bisa menghapus sendiri ...

s3lph
sumber
3

Format MS-DOS .com

Itu menulis instruksi yang tidak valid (FFFF) ke dalam memori dan kemudian mengeksekusi mereka, membuat NTVDM crash.

Heksadesimal

B8 FF FF A3 06 01

Bahasa assembly Debug.exe

MOV AX, FFFF
MOV [0106],AX
craftext
sumber