Thách thức: Viết một đoạn mã tự thoát ra [đóng]


39

Tôi đang tìm kiếm (tôi phải không?) Để tìm một đoạn mã thoát ngay lập tức - theo một cách hoàn toàn độc đáo.

Điều này không có nghĩa là: System.exit((int) 'A');(Java).

Nó có thể có nghĩa là:

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

Hầu hết các câu trả lời nâng cao chiến thắng! Tất cả các ngôn ngữ, tất cả các kiến ​​trúc.

Chỉnh sửa: Thoát khỏi bằng cách ném ngoại lệ sẽ không được chấp nhận nữa!


3
Nhưng đó không phải là bất thường để kết thúc thực thi ... Chà, nó là một thay thế exit(), nhưng vẫn là một tính năng được triển khai ...
s3lph

13
Đây không phải là mã trolling - chúng tôi biết chúng tôi muốn câu trả lời kỳ lạ từ câu hỏi này.
Liam Dawson

6
Có phải tắt hệ thống làm việc?
Hosch250

8
Có lần tôi đã vô tình gây ra card mạng cho DMA trên hệ điều hành. Khi nó xảy ra, bạn ngay lập tức quay lại BIOS, khởi động lại.
Ben Jackson

3
Tôi cảm thấy như Shannon đã đánh bại chúng tôi ở đây;)
ngôi sao sáng

Câu trả lời:


44

bash, 6 ký tự

exec [

execthay thế quá trình hiện tại bằng một cái gì đó khác. [là lệnh ngắn nhất tôi có thể thấy nó vô hại (đó là bí danh cho test)


Một ngoại lệ khác?
Julian Kuhn

Không, chỉ cần exec'ra [lệnh :)
Dennis Kaarsemaker

1
tại sao nó làm việc [làm gì?
s3lph

@the_Seppi, nó thay thế quy trình hiện tại bằng [(còn gọi là kiểm tra)
Timtech

~ $ echo $PATH/?-> /bin/X /bin/[ /bin/w. Vỏ cá cho tôi hai mệnh lệnh khác. wlà thú vị theo ý kiến ​​của tôi.
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

Chấm dứt chương trình nhanh như người dùng có thể phản ứng ;-)


10
Nâng cao vì nó làm tôi cười.
Michael Stern

5
Tốt hơn đừng chạy nó trên Linux.
kenorb

1
dd: / dev / hda: không tìm thấy
Joshua

39

Mã đỏ

(Bối cảnh: Redcode là ngôn ngữ lắp ráp giả được sử dụng trong trò chơi lập trình Core War do AK Dewdney giới thiệu năm 1984. Nó thường sử dụng rất nhiều mã tự sửa đổi. Tôi đã viết một hướng dẫn nhỏ về lập trình Redcode cách đây vài năm. )

MOV 1, 0

Chương trình chỉ dẫn đơn này không chỉ giết chết chính nó mà còn xóa sạch mã chương trình của chính nó khỏi bộ nhớ, không để lại dấu vết của chính nó trong bộ nhớ.

Chán, bạn nói gì? Rốt cuộc, chương trình trên dù sao cũng đã chết, ngay cả khi nó không ghi đè mã của nó. OK, đây là một thứ lau sạch toàn bộ lõi trước khi tự lau và chết:

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

Hai hướng dẫn đầu tiên thực sự làm hầu hết công việc: đó chỉ là một vòng lặp sao chép / nhảy đơn giản sao chép ô lệnh trống (được khởi tạo thành DAT 0, 0) sau khi kết thúc chương trình cho mọi ô tiếp theo (sử dụng chế độ địa chỉ gián tiếp tăng sau >), cho đến khi con trỏ cuối cùng quấn quanh đầu bộ nhớ và ghi đè lên MOVchính vòng lặp đó. Khi điều đó xảy ra, JMN(JuMp nếu không bằng 0) sẽ phát hiện ra nó và rơi qua.

Vấn đề là điều này vẫn khiến JMNbản thân không bị cản trở. Để loại bỏ nó, chúng ta cần một cái khác MOVđể xóa JMN... nhưng điều đó có nghĩa là chúng ta cần một cái khác MOVđể xóa cái đó MOV , v.v. Để làm cho toàn bộ chương trình biến mất không một dấu vết, chúng ta phải bằng cách nào đó sắp xếp cho một MOVlệnh duy nhất để xóa cả chính nó và ít nhất một lệnh khác.

Đó là nơi SPLxuất hiện - đó là một trong những mã độc nhất trong Redcode. Về cơ bản, đó là một hướng dẫn "Chi nhánh cả hai cách". Bạn thấy, thay vì một thanh ghi "bộ đếm chương trình" đơn giản, giống như bất kỳ CPU thông thường nào, Redcode VM có một "hàng đợi xử lý": một danh sách các con trỏ theo chu kỳ để hướng dẫn được thực thi. Thông thường, trên mỗi chu kỳ, một con trỏ lệnh được chuyển ra khỏi đầu hàng đợi, lệnh được thực thi và lệnh tiếp theo (trừ khi có một bước nhảy hoặc một lệnh bất hợp pháp) được đẩy vào đuôi của hàng đợi. Nhưng SPLlàm cho cả lệnh tiếp theo lệnh đích đã cho (trong trường hợp đó cũngSPL 1 là lệnh tiếp theo) được đẩy lên hàng đợi.

Kết quả cuối cùng của tất cả những điều này là, sau khi hai SPL 1hướng dẫn đã được thực thi, bây giờ có bốn quy trình trong hàng đợi, tất cả về việc thực hiện cuối cùng MOV. Điều này là vừa đủ để quét sạch JMN, cả SPLs và MOVchính nó, và nó cũng để lại ptrô hướng dẫn như DAT 0, 0- không thể phân biệt được với lõi trống xung quanh nó.

(Ngoài ra, chúng tôi có thể thay thế ptrhướng dẫn bằng MOV 1, 1, hướng dẫn đã được chuyển đổi thành MOV 1, 0hướng dẫn trước đó và do đó sẽ tự xóa sạch, giống như chương trình đầu tiên ở trên đã làm.)

Thi thiên Nếu bạn muốn kiểm tra các chương trình này, hãy tải xuống trình giả lập Redcode (còn gọi là MARS). Tôi khuyên bạn nên hoặc CoreWin hoặc đáng kính pMARS , mặc dù có một số mô phỏng tốt khác nữa.


Không chỉ đơn giản là ném một vi phạm truy cập?
Daniel Varod

12
Vi phạm quyền truy cập? Điều kỳ lạ đó là gì? (Nghiêm túc, Redcode chạy trong một VM khá trừu tượng. Tất cả địa chỉ là tương đối, không gian địa chỉ liền kề (và tuần hoàn) và mọi địa chỉ đều hợp lệ.)
Ilmari Karonen

MOV 1, 0 có sao chép 1 vào địa chỉ 0 hay ngược lại không? Trong tất cả các ngôn ngữ trình biên dịch tôi biết địa chỉ 0 là bất hợp pháp (địa chỉ NULL).
Daniel Varod

4
Cú pháp là MOV source, dest. Nhưng như tôi đã nói, tất cả địa chỉ trong Redcode đều tương đối, vì vậy địa chỉ 0thực sự có nghĩa là "địa chỉ của hướng dẫn này", trong khi địa chỉ 1thực sự có nghĩa là "địa chỉ của hướng dẫn này + 1". (Và địa chỉ tuyệt đối 0 dù sao cũng không phải là đặc biệt trong Redcode; thực tế, một hậu quả thú vị của thiết kế "tất cả địa chỉ tương đối" là chương trình Redcode thực sự không thể tìm thấy địa chỉ tuyệt đối của chính nó trong lõi! )
Ilmari Karonen

2
Man, tôi rất biết ơn bạn. Tôi chưa bao giờ nghe về Core War.
xem

32

C

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

Lưu ý rằng đây không phải là mã di động. Nó hoạt động với ZOG C trên ART DS9000 . Tôi tin rằng việc sử dụng vũ khí độc đáo đủ điều kiện cho mã này cho thử thách này. Nếu bạn lo ngại rằng sự chậm trễ cần có để đoạn mã đó phân phối tải trọng của nó không đủ điều kiện ngay lập tức , hãy liên hệ với chúng tôi để được tư vấn về các cuộc đình công phủ đầu.

effect of launch

Trên máy tính ở nhà của tôi, nó thậm chí không biên dịch - Tôi không có trình điều khiển và thư viện phù hợp. Tôi đã nghe nói rằng có những triển khai C phổ biến trong đó chương trình này biên dịch và chạy đến các hiệu ứng ít ngoạn mục hơn, nhưng tôi chưa bao giờ có sự can đảm để thử.


2
Câu trả lời hay nhất, nương tay!
Vector

3
+1. (0) 1; Lúc đầu, tôi nghĩ rằng @Gilles đang bị troll ở đây ... nhưng sau đó tôi đã kiểm tra trang web của ART Inc. ... và đó là lúc tôi nhận ra mình bị troll nặng đến mức nào!
vaxquis

30

JavaScript

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

Đơn giản chỉ cần điều hướng đến một trang web khác ( ngon ). :-)

Chơi gôn (10 ký tự):

location=1

7
mmmm, kem: P
Biến động

28

C #

Giết chính nó bằng cách giết chết mọi quá trình nhưng chính nó.

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

Để thêm gia vị một chút, chúng ta có thể PInvoke TerminateProcessthay vì sử dụngProcess.Kill


4
+1 cho phương pháp giết người rất độc đáo, do đó khiến chương trình của bạn bị trục trặc với hệ thống (hoặc ít nhất, tôi cho rằng đó là ý tưởng?). Tôi không có thời gian chạy C # trên máy này, nhưng tôi phải hỏi ... Trong thực tế, điều này cuối cùng có làm hệ thống ngừng hoạt động hay chỉ tất cả các quy trình đang chạy? (Tôi nghĩ rằng các chương trình C # đã tự gọi trình thông dịch, do đó không dựa vào sự tồn tại của một quy trình JIT / CIL cụ thể ...). Một lần nữa, suy nghĩ công việc tuyệt vời 'bên ngoài hộp' (har har) về điều này :)
Đột phá

4
-1 (nếu tôi có đại diện): meta về trolling mã nói rằng các câu trả lời phá hoại không được phép vì nguy cơ mọi người dùng thử chúng trên máy của họ. Xem viên đạn thứ hai trong danh sách các hạn chế: codegolf.stackexchange.com/tags/code-trolling/info
Kevin - Tái lập Monica

Các quy trình hệ thống không thể bị giết nếu không có quyền quản trị, phải không?
Sange Borsch

3
@Kevin mã thách thứcmã trolling là các thẻ khác nhau với các quy tắc khác nhau.
osvein

3
@ user1981338: câu hỏi ban đầu có thẻ trolling mã, nhưng nó đã được chỉnh sửa. Bây giờ thẻ đã biến mất, +1.
Kevin - Tái lập Monica

21

BASH - 12 ký tự

:(){ :|:&};:

Xe nâng cổ điển. Khóa máy tính và buộc người dùng (hoặc quản trị viên) khởi động lại.


5
Nhàm chán - nhưng vẫn là sở thích cá nhân của tôi. Tôi sử dụng điều này để tắt các hệ thống trực tiếp
s3lph

3
Nó tự khởi động nhiều lần có thể, điều đó không bỏ được.
bến tàu

1
Nhưng nó sẽ bắt đầu càng nhiều quá trình càng tốt cho đến khi máy tính gặp sự cố và do đó thoát khỏi chương trình
s3lph

14
+1 để thêm các biểu tượng mặt cười như :():|
Chương trìnhFOX

1
@Kartik: Không có khoảng trắng đầu tiên, bạn sẽ gặp lỗi cú pháp. Bạn có thể loại bỏ cái thứ hai.
Dennis

20

Python (trên máy tính xách tay cũ)

Trên máy tính xách tay cũ với bộ xử lý lõi đơn và làm mát kém:

while True:
    print("CPU Temperature rising")

Khi máy tính xách tay phát nổ (hoặc chỉ tắt) sau vài giờ, chương trình sẽ không chạy.

(Để có kết quả tốt nhất, hãy bọc máy tính xách tay trong chăn hoặc một cái gì đó)


18

Hồng ngọc

kills quá trình ruby ​​/ irb đang chạy trên * nix.

`kill #{$$}`

2
Tôi thích sự thanh lịch của cái này. +1
Doorknob

18

Táo 2 cơ bản

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

Nó ghi đè lên một trong những hướng dẫn của nó bằng một END.


Làm thế nào để cái này hoạt động?
Johannes

5
@Johannes: trong Applesoft BASIC, chương trình được lưu trữ ở dạng mã thông báo trong bộ nhớ. Vì không có bảo vệ hệ điều hành hoặc bộ nhớ, nó luôn được lưu trữ ở cùng một nơi và không có gì ngăn bạn ghi vào bộ nhớ đó. Vì vậy, cái đầu tiên POKEviết ENDmã thông báo qua PRINTmã thông báo, và sau đó cái thứ hai POKEviết một dấu kết thúc lệnh trên cái đầu tiên ". Khi GOTOđược thực thi, nó kết thúc chạy ENDthay vì PRINTvà chương trình kết thúc.
bến tàu

14

Trong lắp ráp, một cái gì đó như thế này có thể sẽ hoạt động:

jmp 0

Tôi nhớ rằng biên dịch này thực sự làm việc DOS. Sau đó, nó khởi động lại máy tính.


thử ret; Trên thực tế tôi sẽ đăng bài này như một câu trả lời: P
Julien Lebot

retf sẽ hoạt động, tôi đã đưa ra câu trả lời :) Nó sẽ giết nó vì cách phân đoạn bộ nhớ hoạt động (hoặc không hoạt động, tôi nên nói) trên các hệ điều hành hiện đại
chbaker0

»Jmp 0« hoạt động với DOS, vì hai byte đầu tiên của đoạn mã là CD 20 hoặc 'INT 20' là mã cho chương trình thoát. »Đẩy 0; ret «có thể có tác dụng tương tự.
Daniel

13

PHP

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

Hiệu ứng:
Xóa tệp script crappy của bạn và sau đó giết chương trình của bạn.
Ném một trong những cậu bé xấu số này vào một số codebase để gây nhầm lẫn cho mọi người.


Đây không phải là cú pháp PHP hợp lệ. Bạn cố gắng xác định một hàm quitnhưng danh sách tham số là mã để chạy. Tôi nhận được một lỗi phân tích cú pháp khi cố gắng chạy nó.
Emil Vikström

@ EmilVikström - Đã sửa bây giờ.
donutdan4114

12

C, 9 ký tự

Biên dịch với gccvà các trình biên dịch khác, những người không bận tâm về các chi tiết nhỏ nhặt như mainkhông phải là một chức năng.
Hoạt động trên x86nền tảng - chương trình thoát ngay lập tức.

main=195;

195 là opcode của rethướng dẫn.


4
Segfaults cho tôi. mainđược đặt tại .datavì nó là int, không phải trong .text.datađược tải vào một trang không thể thực thi.
mniip

10

Tôi luôn muốn đăng bài này ở đâu đó, tôi đoán nó phù hợp ở đây mặc dù đã có câu trả lời được chấp nhận.

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

Điều này hoạt động trên bất kỳ hệ thống bài 4.3BSD và những người khác thực hiện revoketheo cùng một cách. Linux thậm chí không có nguyên mẫu cho nó, MacOS đã làm trước đây nhưng chỉ trả về lỗi trong các phiên bản gần đây.

revokelấy một đường dẫn đến một tệp và hủy bỏ tất cả các tham chiếu đến tệp đó. Điều này bao gồm bất kỳ ánh xạ bộ nhớ của tập tin đó, ngay cả bản thân thực thi. Rõ ràng, bạn cần bắt đầu chương trình với một đường dẫn đến nó, điều này sẽ không hoạt động nếu nó xảy ra trong PATH.

Một biến thể của cái này sẽ hoạt động trên hầu hết các hệ thống giống như unix là:

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

Chúng tôi chỉ hủy ánh xạ trang ánh xạ mainđể khi cuộc gọi munmaptrở lại, nó không có nơi nào để quay lại. Có một cơ hội nhỏ mà hàm gọi đếnmunmap chỉ nằm trên một ranh giới trang và việc trả về sẽ thành công, vì vậy để chắc chắn điều này hoạt động, có lẽ chúng ta phải thử hủy sơ đồ hai trang trước.

Và tất nhiên, một biến thể trong cùng một chủ đề:

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

Chỉ cần hủy sơ đồ ngăn xếp để chúng tôi không có nơi nào để quay lại. Cùng cảnh báo với việc hủy ánh xạ main- chúng ta có thể cần hủy ánh xạ hai trang, ngoại trừ việc chúng ta phải nhớ rằng ngăn xếp có thể phát triển xuống (trừ khi bạn đang ở trên PA-RISC hoặc một số kiến ​​trúc lạ khác như thế).

Một cách khác để kéo tấm thảm từ dưới chân bạn:

#include <sys/resource.h>

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

Đây là hệ điều hành phụ thuộc vào cách hệ thống xử lý giới hạn cpu 0 giây và tần suất chiếm thời gian cpu được thực hiện. MacOS giết chết quy trình ngay lập tức, Linux yêu cầu vòng lặp while, một hệ thống khác mà tôi đã thử không làm gì cả ngay cả với giới hạn một giây và vòng lặp while, tôi không gỡ lỗi thêm.


9

sh

sudo kill -SEGV 1

Kernal hoảng loạn tức thì trên Linux. Phá hủy tất cả các quá trình, bao gồm cả chính nó

Cmd

pskill csrss.exe

Màn hình xanh ngay lập tức trên Windows. Chấm dứt Client/Server Runtime SubSystem. Pskill phải được cài đặt.


killall initCũng sẽ làm việc?
s3lph

1
@the_Seppi 1. Chỉ người dùng cấp gốc mới có thể gửi tín hiệu đến init 2. Ban đầu sẽ chỉ gây hoảng loạn hạt nhân nếu nhận được tín hiệu 11 (lỗi phân tách)
MultiplyByZer0

OK cảm ơn bạn ... Bạn có biết điều gì xảy ra nếu bạn sử dụngsudo killall init
s3lph

1
@the_Seppi Vâng, tôi có, tôi đã thử nó trước đây. Ban đầu bỏ qua nó, bởi vì init có thể quyết định xem nó có nhận được tín hiệu hay không, vì vậy nó hoàn toàn bỏ qua SIGKILL. unix.stackexchange.com/questions/7441/ Cách
MultiplyByZer0

8

Trong C (Tương thích Windows / Linux / (có thể cả Unix / Freed BSD)):

main;

Ví dụ sử dụng:

Trong Windows biên dịch với:

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

Và Linux:

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

Giả sử trình biên dịch được cài đặt và trong biến PATH hiện tại.

EDIT: Về mặt kỹ thuật, nó đưa ra một ngoại lệ (được bộ xử lý đưa ra) trên Linux, nhưng không có thông báo nào như vậy trên Windows. Vì vậy, mục này có thể không hợp lệ; tuy nhiên tôi nghĩ nó thật tuyệt: P

EDIT: Trong trình biên dịch x86 (sử dụng NAsm / YAsm)

global s
s:
    ret

Biên dịch với:

(Các cửa sổ)

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

Thật không may, cách này cũng tạo ra kết xuất lõi trên linux, vì vậy tôi tin rằng nó có chức năng tương đương với phương thức C; ngoại trừ hiệu quả hơn.


1
Ồ Tôi chỉ biên dịch điều này với -Wall -Wextra -std=c99 -pedanticvà không có cảnh báo nào cả.
ldrumm

Tôi thực sự muốn đưa ra điều này, nhưng đã quyết định chống lại, bởi vì nó sẽ là bản sao của giải pháp của tôi cho vấn đề khác ( codegolf.stackexchange.com/a/8778/3103 ).
Konrad Borowski

7

Lấy mọi thứ theo nghĩa đen một cách ngớ ngẩn với 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

6

Con trăn


Sử dụng các multiprocessingmô-đun , chúng ta có thể đẻ trứng một thread có nhiệm vụ giao tiếp với quá trình ban đầu thông qua một hàng đợi, nói với nó khi bỏ thuốc lá:

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

AN C

Không có tối ưu hóa mã, chương trình sau thoát quá nhanh - thực sự không thể khởi chạy được mặc dù nó biên dịch thành chương trình hợp lệ

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

char tooLong[0x7CFFFFFF];

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

điều này có thể phụ thuộc vào hệ thống - bình luận nếu bạn có thể khởi chạy nó.


"Bỏ cuộc bằng cách ném ngoại lệ sẽ không được chấp nhận nữa!" và điều này bao gồm các lỗi hết bộ nhớ
John Dvorak

2
@JanDvorak Có sự khác biệt giữa lỗi và ngoại lệ .
syb0rg

Tôi tin rằng quy tắc bao gồm cả hai, tuy nhiên. Người hỏi có thể làm rõ? Và không, tôi không nghĩ rằng một câu hỏi SO dành riêng cho Java là một tài liệu tham khảo tốt, đặc biệt là khi bạn bảo vệ một giải pháp C.
John Dvorak

9
Chương trình không đưa ra lỗi cũng như không gây ra lỗi trong chương trình. Hệ thống không thể xử lý nó.
Julian

6

Đuợc. Nếu gọi đơn giản System.exitlà không được phép trong Java, vậy còn gọi nó thông qua sự phản chiếu từ một luồng khác thì sao?

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

Tra cứu phương thức thoát, sinh ra một luồng mới và đếm ngược cho đến khi luồng đó giết quá trình bằng cách gọi thoát qua phản xạ.


Đếm ngược? Hình như nó tính đến tôi.
Justin

1
Er, vâng, điểm tốt. Đáng lẽ tôi nên nói đếm ngược, hoặc chỉ nói rằng nó đếm cho đến khi nó thoát.
David Conrad

6

ngôn ngữ máy x86, 1 ký tự

Bạn thường có thể thực hiện một công việc có thể thực hiện được bằng một lệnh RET

\xC3 

4
Làm thế nào mà khác thường?!
aditsu

6

C (Linux)

Phiên bản tự sát

Gửi một SIGKILL cho chính nó.

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

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

    printf("Not killed");
}

Phiên bản "Tu quoque mi fili"

Dĩa, sau đó con trai giết cha.

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

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

    printf("Not killed");
}

5

Perl

...

Đó là tất cả.


Giải thích: Nó ném ngoại lệ Unimplementedvà thoát ngay lập tức.


Thêm lời giải thích.
PhiNotPi

3
Tôi không biết, ngoại lệ là nhàm chán.

6
Invalif do thích ứng thách thức: không có ngoại lệ
s3lph

Tôi chỉ chưa kịp viết một câu trả lời khác.
PhiNotPi

5

Batch & Gỡ lỗi

Một oldie nhưng goodie, hoạt động trên các máy DOS để khởi động lại hệ thống ngay lập tức. Phần thưởng trong đó là một kịch bản dự định được giải thích bởi hai phiên dịch viên không tương thích khác nhau.

đặt lại

goto start

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

Việc giải thích tệp bó bỏ qua các hướng dẫn dành cho gỡ lỗi và tự cung cấp thông tin để gỡ lỗi để giải thích. Dòng trống sau gotolà cần thiết để xóa lỗi trong debugkết quả đó do nó được cung cấp một lệnh không xác định, đó là goto.


1
Tôi đã từng làm điều tương tự như dec ax; rìu đẩy; đẩy bx; retf
moopet

3

Java

Mã dưới đây không được kiểm tra và sẽ chỉ hoạt động trên một số nền tảng.

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

45
Điều gì với khoảng trắng khủng khiếp đó
Doorknob

7
Trên UNIX, nó sẽ phải như vậy sudo reboot, trên Windowsshutdown /r /t 0
s3lph

2
Trên UNIX, bạn chỉ cần thực thi chương trình đó bằng sudo, không phải lệnh mà bạn muốn thực thi.
Julian Kuhn

1
@ the_Seppi, @ JohannesKuhn như tôi đã nói nó chỉ hoạt động trên một số nền tảng và tôi cho rằng bạn sẽ gọi nó như thế nào sudo java Quitter.
emory

3
-1 KHÔNG NÂNG CẤP WHITESPACE !!!
vaxquis

3

Quyền hạn

get-process | stop-process -force

Lưu cái này dưới dạng 'lastresort.ps1' và nó sẽ thực hiện thủ thuật.

Nếu bạn gặp vấn đề với tập lệnh không thực thi do một số chính sách ngu ngốc, hãy nhập mã này trước khi thực thi tập lệnh:

Set-ExecutionPolicy Unrestricted

Chỉ hoạt động tốt từ dòng lệnh mà không lưu như một kịch bản.
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 (một dòng thay thế cho OP)

Tôi đoán rằng thực sự không có câu trả lời Python nào tốt hơn những gì OP đề xuất, nhưng tôi không thích cách nó có quá nhiều dòng, vì vậy đây là cách bạn làm chính xác như OP đã làm nhưng chỉ trong một dòng:

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

Bạn có thể làm cho điều này một chức năng và nó sẽ làm công việc cho bạn.


3

Ý tưởng của riêng tôi, không tham gia

TIGCC (dành cho Texas م umens TI-89, TI-89 Titanium, TI-92 +, TI-V200)

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

TI-Basic cho cùng một máy tính

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

Chương trình làm gì: Đầu tiên, nó tự xóa khỏi RAM. (Đừng đặt nó vào ROM nếu không nó sẽ hoạt động ...) Nó vẫn có thể chạy vì khi thực hiện, một bản sao của chương trình được tạo và thực thi. asm(trap #2);gọi lệnh ASM4E424E750000 , là lệnh để thiết lập lại máy tính, xóa RAM (Flash ROM không bị ảnh hưởng) và cài đặt lại tất cả các ứng dụng.

EDIT: Chỉ cần thử nghiệm phiên bản Cơ bản. Nó không thể tự xóa ...


3

Định dạng MS-DOS .com

Nó ghi các hướng dẫn không hợp lệ (FFFF) vào bộ nhớ và sau đó thực thi chúng, làm cho NTVDM bị sập.

Hệ thập lục phân

B8 FF FF A3 06 01

Ngôn ngữ lắp ráp Debug.exe

MOV AX, FFFF
MOV [0106],AX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.