चुनौती: कोड का एक टुकड़ा लिखें जो खुद को बंद करता है [बंद]


39

मैं खोज रहा हूँ (मैं हूँ?) कोड का एक टुकड़ा है जो तुरंत - एक बिल्कुल अपरंपरागत तरीके से - समाप्त होता है।

इसका मतलब यह नहीं है: System.exit((int) 'A');(जावा)।

इसका मतलब हो सकता है:

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

अधिकांश उत्कीर्ण उत्तर जीतता है! सभी भाषाएं, सभी आर्किटेक्चर।

संपादित करें: अपवादों को फेंककर छोड़ने को किसी भी अधिक स्वीकार नहीं किया जाएगा!


3
लेकिन निष्पादन को समाप्त करने के लिए अपरंपरागत नहीं है ... खैर, यह एक विकल्प है exit(), लेकिन फिर भी यह एक कार्यान्वित विशेषता है ...
s3lph

13
यह कोड-ट्रोलिंग नहीं है - हम जानते हैं कि हम इस एक से अजीब जवाब चाहते हैं।
लियाम डॉसन

6
क्या सिस्टम बंद करने से काम बंद हो जाता है?
होशो

8
मैंने एक बार गलती से ऑपरेटिंग सिस्टम पर डीएमए के लिए एक नेटवर्क कार्ड का कारण बना। जब यह हुआ था तो आप तुरंत BIOS में वापस आ गए थे, रिबूट हो रहे थे।
बेन जैक्सन

3
मुझे ऐसा लगता है कि शैनन ने हमें यहां हरा दिया है;)
उज्ज्वल-स्टार

जवाबों:


44

बैश, 6 अक्षर

exec [

execवर्तमान प्रक्रिया को किसी अन्य चीज़ से बदल देता है। [सबसे छोटा कमांड है जो मुझे मिल सकता है जो हानिरहित है (यह एक उपनाम है test)


एक अन्य अपवाद?
जोहान्स कुह्न

नहीं, बस exec'आईएनजी [कमांड :)
डेनिस करसेमेकर

1
यह काम क्यों कर रहा है क्या करता है?
s3lph

@the_Seppi इसे [(उर्फ परीक्षण) के साथ वर्तमान प्रक्रिया की जगह लेता है
टिमटेक

~ $ echo $PATH/?-> /bin/X /bin/[ /bin/w। मछली के खोल ने मुझे दो अन्य आदेश दिए। wमेरी राय में दिलचस्प है।
कोनराड बोरोस्की

46

दे घुमा के

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

उपयोगकर्ता जितनी जल्दी प्रतिक्रिया कर सकता है उतनी तेजी से कार्यक्रम समाप्त होता है ;-)


10
Upvoting क्योंकि इससे मुझे हंसी आती है।
माइकल स्टर्न

5
बेहतर है कि इसे लिनक्स पर न चलाएं।
केनोरब जूल

1
dd: / dev / hda: नहीं मिला
यहोशू

39

Redcode

(बैकग्राउंड: रेडकोड 1984 में एके डेवडनी द्वारा शुरू की गई कोर वॉर प्रोग्रामिंग गेम में इस्तेमाल की गई छद्म-असेंबली भाषा है। यह आमतौर पर सेल्फ-मॉडिफाइंग कोड का भारी उपयोग करता है। मैंने कुछ साल पहले रेडकोड ​​प्रोग्रामिंग पर एक अच्छा सा ट्यूटोरियल लिखा था। )

MOV 1, 0

यह एकल-निर्देश कार्यक्रम न केवल खुद को मारता है, बल्कि स्मृति से अपना स्वयं का प्रोग्राम कोड भी मिटा देता है, जिससे स्मृति में खुद का कोई निशान नहीं रह जाता है।

बोरिंग, आप कहते हैं? सब के बाद, ऊपर कार्यक्रम वैसे भी मर गया है, भले ही यह अपने कोड को अधिलेखित नहीं किया था। ठीक है, यहाँ एक है जो अंत में खुद को पोंछने और मरने से पहले पूरे कोर को साफ करता है:

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

पहले दो निर्देश वास्तव में अधिकांश काम करते हैं: यह सिर्फ एक साधारण कॉपी / जंप लूप है जो DAT 0, 0प्रत्येक बाद की सेल के लिए कार्यक्रम के अंत के बाद रिक्त निर्देश सेल (जो कि आरंभ में ) की प्रतिलिपि बनाता है (पोस्ट-इन्क्रीमेंट अप्रत्यक्ष पते मोड का उपयोग करके) >), जब तक कि पॉइंटर आखिरकार मेमोरी की शुरुआत के आसपास घूमता है और MOVलूप में ही ओवरराइट हो जाता है। एक बार ऐसा होने पर, JMN(JuMp if not शून्य) इसका पता लगा लेता है और गिर जाता है।

समस्या यह है कि यह अभी भी JMNखुद को छोड़ देता है । इससे छुटकारा पाने के लिए, हमें MOVपोंछने के लिए एक और की आवश्यकता है JMN... लेकिन इसका मतलब है कि हमें अभी तक MOVइसे पोंछने के लिए एक और की आवश्यकता है MOV , और इसी तरह। पूरे कार्यक्रम निशान के बिना गायब हो बनाने के लिए हम एक एकल के लिए किसी भी तरह की व्यवस्था करनी MOVअनुदेश साफ करने के लिए दोनों ही है और कम से कम एक अन्य अनुदेश।

यही वह जगह है जहां SPL- यह Redcode में सबसे अजीब opcodes में से एक है। असल में, यह एक "शाखा दोनों तरीके" निर्देश है। आप देखें, एक साधारण "प्रोग्राम काउंटर" रजिस्टर के बजाय, किसी भी सामान्य सीपीयू की तरह, Redcode VM के पास "प्रक्रिया कतार" है: निष्पादित करने के निर्देशों के संकेत की एक चक्रीय सूची। आम तौर पर, प्रत्येक चक्र पर, एक निर्देश सूचक को कतार के सिर से हटा दिया जाता है, अनुदेश निष्पादित किया जाता है और अगला निर्देश (जब तक कि एक कूद या अवैध निर्देश नहीं था) कतार की पूंछ पर धकेल दिया जाता है। लेकिन SPLकारण बनता है दोनों अगले निर्देश और दिए गए लक्ष्य अनुदेश (जो, के मामले में SPL 1, है भी अगले निर्देश) को कतार पर धकेल दिया।

इस सब का उलटा असर यह है कि, दो SPL 1निर्देशों के लागू होने के बाद , कतार में अब चार प्रक्रियाएँ हैं, सभी अंतिम निष्पादित होती हैं MOV। यह साफ करने के लिए पर्याप्त है JMN, दोनों SPLऔर MOVही है, और यह भी छोड़ देता है ptrके रूप में अनुदेश सेल DAT 0, 0- इसके आसपास खाली कोर से पृथक।

(वैकल्पिक रूप से, हमने ptrनिर्देश को बदल दिया है MOV 1, 1, जिसे MOV 1, 0पहले के निर्देशों द्वारा परिवर्तित कर दिया गया है, और इसलिए पहले किए गए पहले प्रोग्राम की तरह ही खुद को मिटा दिया होगा।)

Ps। यदि आप इन प्रोग्राम का परीक्षण करना चाहते हैं, तो एक Redcode Simulator (उर्फ MARS) डाउनलोड करें। मैं या तो CoreWin या आदरणीय नामों की सिफारिश करूंगा , हालांकि कई अन्य अच्छे सिमुलेटर भी हैं।


W'tthis बस एक पहुंच उल्लंघन फेंक देते हैं?
डैनी वारोड

12
उपयोग का उल्लंघन? कैसी अजीब बात है? (गंभीरता से, Redcode एक बहुत सार VM में चलता है। सभी संबोधन सापेक्ष हैं, पता स्थान सन्निहित (और चक्रीय) है और प्रत्येक पता मान्य है।)
इल्मरी करोनें

क्या MOV 1, 0 पता 1 में कॉपी है या अन्य तरीके से? सभी कोडांतरक भाषाओं में मुझे पता है कि पता 0 अवैध है (NULL पता)।
डैनी वारोड

4
वाक्य-विन्यास है MOV source, dest। लेकिन जैसा कि मैंने कहा, Redcode में सभी पते सापेक्ष हैं, इसलिए पते का 0अर्थ वास्तव में "इस निर्देश का पता" है, जबकि पते का 1वास्तव में अर्थ है "इस निर्देश का पता + 1"। (और पूर्ण पता 0 वैसे भी Redcode में किसी भी तरह से विशेष नहीं है; वास्तव में, "सभी रिश्तेदार पते" डिजाइन का एक दिलचस्प परिणाम यह है कि वास्तव में Redcode कार्यक्रम के लिए कोर में अपना पूर्ण पता लगाना असंभव है ! )
इल्मरी करोनें

2
यार, मैं तुम्हारा बहुत आभारी हूँ। मैंने कोर वॉर के बारे में कभी नहीं सुना था।
14

32

सी

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

ध्यान दें कि यह पोर्टेबल कोड नहीं है। यह ART DS9000 पर ZOG C के साथ काम करता है । मेरा मानना ​​है कि अपरंपरागत आयुध का उपयोग इस चुनौती के लिए इस कोड को योग्य बनाता है। यदि आप चिंतित हैं कि कोड के उस टुकड़े को अपने पेलोड को डिलीवर करने में जितनी देरी होती है , उतने समय के लिए अर्हता प्राप्त नहीं होती है , तो हम पूर्व-प्रहार पर सलाह के लिए संपर्क करें।

लॉन्च का प्रभाव

मेरे होम मशीन पर, यह भी संकलित नहीं करता है - मेरे पास सही ड्राइवर और लाइब्रेरी नहीं है। मैंने सुना है कि लोकप्रिय सी कार्यान्वयन हैं जहां यह कार्यक्रम संकलन करता है और कम शानदार प्रभावों के लिए चलता है, लेकिन मैंने कभी भी कोशिश करने के लिए तंत्रिका नहीं किया है।


2
सबसे अच्छा जवाब, हाथ नीचे!
वेक्टर

3
+1। (0) 1; सबसे पहले, मैंने सोचा कि @Gilles यहाँ ट्रोल हो रहा है ... लेकिन फिर मैंने ART इंक वेबपेज चेक किया ... और यह तब था जब मुझे एहसास हुआ कि मुझे कितना ट्रोल किया गया था!
वैक्सक्विस


28

सी#

हर प्रक्रिया को मारकर खुद को ही मारता है।

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

इसे थोड़ा मसाला देने के लिए हम TerminateProcessउपयोग करने के बजाय PInvoke कर सकते थेProcess.Kill


4
प्रत्येक एकल चीज़ को मारने की बहुत अपरंपरागत विधि के लिए +1, इस प्रकार आपके स्वयं के प्रोग्राम को सिस्टम के साथ नीचे जाने का कारण बनता है (या कम से कम, मुझे लगता है कि यह विचार है?)। मेरे पास इस मशीन पर C # रनटाइम नहीं है, लेकिन मुझे पूछना है ... व्यवहार में, क्या यह सिस्टम को नीचे ले जाने या केवल सभी चलने वाली प्रक्रियाओं को समाप्त करता है? (मुझे लगा कि C # कार्यक्रमों ने दुभाषिया को खुद को आमंत्रित किया, इस प्रकार एक विशेष JIT / CIL प्रक्रिया के अस्तित्व पर निर्भर नहीं ...)। फिर से, इस बॉक्स पर 'बॉक्स के बाहर' (बहुत बुरा) सोचकर महान काम:
ब्रेकथ्रू

4
-1 (अगर मेरे पास प्रतिनिधि था): कोड ट्रोलिंग पर मेटा का कहना है कि विनाशकारी जवाबों की अनुमति नहीं है क्योंकि लोगों की अपनी मशीनों पर उन्हें आज़माने का जोखिम है। प्रतिबंधों की सूची में दूसरी गोली देखें: codegolf.stackexchange.com/tags/code-trolling/info
केविन - मोनिका

सिस्टम प्रक्रियाएं बिना व्यवस्थापक अधिकारों के नहीं मारी जा सकतीं, क्या वे नहीं हैं?
सर्ज बोर्श

3
@ केविन कोड-चैलेंज और कोड-ट्रोलिंग विभिन्न नियमों के साथ अलग - अलग टैग हैं।
ऑसविन

3
@ user1981338: प्रश्न में मूल रूप से कोड-ट्रोलिंग टैग था, लेकिन इसे तब से संपादित किया गया है। अब टैग का चला गया, +1।
केविन - मोनिका

21

BASH - 12 अक्षर

:(){ :|:&};:

क्लासिक फॉरबॉम्ब। कंप्यूटर को लॉक करता है और उपयोगकर्ता (या व्यवस्थापक) को रीबूट करने के लिए मजबूर करता है।


5
बोरिंग - लेकिन फिर भी मेरा व्यक्तिगत पसंदीदा। मैं इसका उपयोग लाइव सिस्टम को बंद करने के लिए करता
हूं

3
यह खुद को जितनी बार चाहे उतनी बार शुरू कर सकता है, यह नहीं है।
मारिनस

1
लेकिन यह तब तक संभव होगा जब तक कि कंप्यूटर क्रैश न हो जाए और कई प्रोग्राम शुरू हो जाएं और इसलिए प्रोग्राम को पूरा किया जाए
s3lph

14
+1 स्माइली जोड़ने के लिए जैसे :()और:|
ProgramFOX

1
@ कार्तिक: पहले स्थान के बिना, आपको एक सिंटैक्स त्रुटि मिलेगी। आप दूसरे को खत्म कर सकते हैं।
डेनिस

20

अजगर (पुराने लैपटॉप पर)

सिंगल कोर प्रोसेसर और खराब कूलिंग वाले पुराने लैपटॉप पर:

while True:
    print("CPU Temperature rising")

जब कुछ घंटों के बाद लैपटॉप फट जाता है (या बस बंद हो जाता है), तो प्रोग्राम चालू नहीं होगा।

(सर्वोत्तम परिणामों के लिए, कंबल या किसी चीज़ में लैपटॉप लपेटें)


18

माणिक

kill* निक्स पर चल रही रूबी / आईआरबी प्रक्रिया।

`kill #{$$}`

2
मुझे इस एक की लालित्य पसंद है। +1
दरवाज़े

18

Apple 2 बेसिक

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

यह एक के साथ अपने निर्देशों को ओवरराइट करता है END


यह कैसे काम करता है?
जोहान्स

5
@ जोहान्स: एप्लेसॉफ्ट बेसिक में, कार्यक्रम को स्मृति में एक टोकन रूप में संग्रहीत किया जाता है। क्योंकि कोई OS या मेमोरी सुरक्षा नहीं है, यह हमेशा एक ही स्थान पर संग्रहीत होता है और आपको उस मेमोरी पर लिखने से रोकने के लिए कुछ भी नहीं है। इसलिए पहला टोकन के ऊपर POKEएक ENDटोकन लिखता है PRINT, और फिर दूसरा POKEपहले पर एक कमांड टर्मिनेटर लिखता है "। जब GOTOनिष्पादित किया जाता है, तो ENDइसके बजाय चलना समाप्त हो जाता है PRINTऔर कार्यक्रम समाप्त हो जाता है।
मारिनस

14

असेंबली में, ऐसा कुछ काम करेगा:

jmp 0

मुझे याद है कि यह वास्तव में काम कर रहे डॉस को संकलित करता है। इसके बाद, इसने कंप्यूटर को रिबूट किया।


पुन: प्रयास करें; वास्तव में मैं इसे एक उत्तर के रूप में पोस्ट करने जा रहा हूं: पी
जूलियन लेबोट

retf काम करेगा, मैंने पहले से ही एक जवाब में डाल दिया है :) यह आधुनिक ऑपरेटिंग सिस्टम पर मेमोरी सेगमेंटेशन के काम करने के तरीके (या मुझे काम नहीं करना चाहिए) के कारण इसे मारता है
chbaker0

»Jmp 0« डॉस के साथ काम करता है, क्योंकि एक कोड सेगमेंट की पहली दो बाइट सीडी 20 थी, या 'INT 20' जो एक्जिट प्रोग्राम के लिए कोड है। »धक्का 0; फिर से «whould वही प्रभाव है।
डेनियल

13

पीएचपी

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

प्रभाव:
अपनी भद्दी स्क्रिप्ट फ़ाइल को हटाता है और फिर आपके प्रोग्राम को मारता है।
लोगों को भ्रमित करने के लिए इन बुरे लड़कों में से एक को कुछ कोडबेस में फेंक दें।


यह मान्य PHP सिंटैक्स नहीं है। आप किसी फ़ंक्शन को परिभाषित करने का प्रयास करते हैं, quitलेकिन चलाने के लिए पैरामीटर सूची कोड है। इसे चलाने का प्रयास करने पर मुझे एक पार्स त्रुटि मिलती है।
एमिल विकासस्ट्रम

@ EmilVikström - अब फिक्स्ड है।
donutdan4114

12

C, 9 वर्ण

साथ संकलन gccऔर अन्य compilers जो की तरह क्षुद्र विवरण के बारे में कोई आपत्ति नहीं है mainएक समारोह नहीं किया जा रहा। प्लेटफार्मों
पर काम करता x86है - कार्यक्रम तुरंत बाहर निकलता है।

main=195;

195 retअनुदेश का ओपकोड है ।


4
मेरे लिए Segfaults। mainस्थित है .dataक्योंकि यह एक int है, अंदर नहीं है .textऔर .dataइसे एक गैर-निष्पादन योग्य पृष्ठ में लोड किया गया है।
मैनीप

10

मैं हमेशा इसे कहीं पोस्ट करना चाहता था, मुझे लगता है कि यह यहाँ फिट बैठता है, भले ही पहले से ही एक स्वीकृत जवाब हो।

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

यह किसी भी पोस्ट 4.3BSD सिस्टम और अन्य पर काम करता revokeहै जो उसी तरह से लागू होते हैं । भले ही इसके लिए कोई प्रोटोटाइप नहीं है, लेकिन मैकओएस ने अतीत में किया था, लेकिन हाल के संस्करणों में केवल त्रुटियां हैं।

revokeएक फ़ाइल के लिए एक रास्ता लेता है और जबरन उस फ़ाइल के सभी संदर्भों को नष्ट कर देता है। इसमें उस फ़ाइल का कोई भी मेमोरी मैपिंग शामिल है, यहां तक ​​कि निष्पादन योग्य भी। जाहिर है, आपको इसके लिए एक पथ के साथ कार्यक्रम शुरू करने की आवश्यकता है, यह काम नहीं करेगा यदि यह पथ में होता है।

इसका एक प्रकार जो अधिकांश यूनिक्स जैसी प्रणालियों पर काम करना चाहिए:

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

हम केवल उस पेज को अनमैप करते हैं, mainताकि जब कॉल munmapवापस आए, तो उसे वापस लौटने के लिए कहीं भी न हो। इस बात की थोड़ी संभावना है कि फ़ंक्शन कॉल munmapकेवल एक पृष्ठ सीमा पर है और वापसी सफल होगी, इसलिए यह सुनिश्चित करने के लिए कि यह काम करता है, हमें संभवतः पहले दो पृष्ठों को अनमैप करने का प्रयास करना होगा।

और निश्चित रूप से, एक ही विषय पर एक भिन्नता:

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

बस स्टैक को अनमैप करें ताकि हमारे पास वापस जाने के लिए कहीं भी न हो। अनमैटिंग के रूप में एक ही कैविएट main- हमें दो पेज अनमैप करने की आवश्यकता हो सकती है, सिवाय इसके कि हमें यह याद रखना होगा कि स्टैक शायद नीचे बढ़ता है (जब तक कि आप पीए-आरआईएससी या उस तरह के कुछ अन्य अजीब वास्तुकला पर नहीं हैं)।

अपने पैरों के नीचे से गलीचा खींचने का दूसरा तरीका:

#include <sys/resource.h>

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

यह ऑपरेटिंग सिस्टम पर निर्भर करता है कि सिस्टम 0 सेकंड सीपीयू की सीमा को कैसे हैंडल करता है और सीपीयू समय के लिए कितनी बार लेखांकन किया जाता है। मैकओएस तुरंत प्रक्रिया को मारता है, लिनक्स को लूप की आवश्यकता होती है, एक और सिस्टम मैंने कोशिश की कि एक सेकंड की सीमा और थोड़ी देर के लूप के साथ भी कुछ नहीं किया, मैंने आगे डिबग नहीं किया।


9

sudo kill -SEGV 1

लिनक्स पर तत्काल कर्नेल आतंक। गंतव्य सभी प्रक्रियाओं, जिसमें स्वयं भी शामिल है

cmd

pskill csrss.exe

विंडोज पर इंस्टेंट ब्लू स्क्रीन। टर्मिनेट करता है Client/Server Runtime SubSystem। Pskill स्थापित होना चाहिए।


killall initकाम भी करेगा ?
s3lph

1
@the_Seppi 1. केवल एक रूट-स्तरीय उपयोगकर्ता init में सिग्नल भेज सकता है। Init केवल एक कर्नेल घबराहट का कारण होगा यदि यह सिग्नल 11 (सेग्मेंटेशन गलती) प्राप्त करता है
MultiplyByZer0

ठीक है धन्यवाद ... क्या आप जानते हैं कि यदि आप उपयोग करते हैं तो क्या होता हैsudo killall init
s3lph

1
@the_Seppi हां, मैं करता हूं, मैंने पहले भी कोशिश की है। Init इसे अनदेखा करता है, क्योंकि init यह तय कर सकता है कि यह सिग्नल प्राप्त करता है या नहीं, इसलिए यह SIGKILL को पूरी तरह से अनदेखा करता है। unix.stackexchange.com/questions/7441/…
MultiplyByZer0

8

सी में (संगत विंडोज / लिनक्स / (शायद यूनिक्स / फ्रीड बीएसडी भी)):

main;

उपयोग उदाहरण:

विंडोज संकलन के तहत:

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

और लिनक्स:

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

संकलक मान लिया गया है और वर्तमान PATH चर में।

संपादित करें: तकनीकी रूप से यह लिनक्स पर एक अपवाद (प्रोसेसर द्वारा उठाया गया) फेंकता है, लेकिन विंडोज पर ऐसा कोई संदेश नहीं है। तो यह प्रविष्टि शायद मान्य नहीं है; हालाँकि मुझे लगता है कि यह अच्छा है: पी

संपादित करें: x86 कोडांतरक में (NAsm / YAsm का उपयोग करके)

global s
s:
    ret

संकलन:

(विंडोज)

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

(लिनक्स)

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

दुर्भाग्य से इस तरह से लिनक्स पर एक कोर डंप भी उत्पन्न होता है, इसलिए मेरा मानना ​​है कि यह कार्यात्मक रूप से सी विधि के बराबर है; अधिक कुशल को छोड़कर।


1
वाह! मैंने बस इसके साथ संकलित किया है -Wall -Wextra -std=c99 -pedanticऔर कोई चेतावनी नहीं है।
ldrumm

मैं वास्तव में इसे लगाना चाहता था, लेकिन इसके खिलाफ फैसला किया, क्योंकि यह मेरे समाधान का डुप्लिकेट होगा अलग समस्या ( codegolf.stackexchange.com/a/8778/3103 )।
कोनराड बोरोस्की

7

हास्केल के साथ मूर्खतापूर्ण तरीके से चीजों को लेना:

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

अजगर


का प्रयोग मॉड्यूल , हम एक और धागा जिनका काम, एक कतार के माध्यम से मूल प्रक्रिया के साथ संवाद करने के लिए जब बाहर निकलने के लिए यह कह रही है अंडे कर सकते हैं:multiprocessing

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 सी

कोई कोड ऑप्टिमाइज़ेशन नहीं होने से निम्न प्रोग्राम इतनी तेज़ी से समाप्त हो जाता है - यह वास्तव में लॉन्च नहीं किया जा सकता है, भले ही यह एक वैध प्रोग्राम में संकलित हो

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

char tooLong[0x7CFFFFFF];

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

यह सिस्टम पर निर्भर हो सकता है - टिप्पणी करें यदि आप इसे लॉन्च कर सकते हैं।


"अपवादों को छोड़ कर किसी भी और स्वीकार नहीं किया जाएगा!" और इसमें आउट-ऑफ-मेमोरी त्रुटियां शामिल हैं
जॉन डिवार्क


मेरा मानना ​​है कि नियम में दोनों शामिल हैं। क्या प्रश्नकर्ता स्पष्ट कर सकता है? और नहीं, मुझे नहीं लगता कि एक जावा-विशिष्ट एसओ प्रश्न एक अच्छा संदर्भ है, खासकर जब आप एक सी समाधान का बचाव कर रहे हैं।
जॉन ड्वोरक

9
कार्यक्रम न तो त्रुटि फेंकता है और न ही कार्यक्रम के भीतर त्रुटि का कारण बनता है। सिस्टम इसे संभाल नहीं सकता है।
जोहान्स

6

ठीक है। यदि System.exitजावा में बस कॉलिंग की अनुमति नहीं है, तो इसे दूसरे धागे से प्रतिबिंब के माध्यम से कैसे कॉल किया जा सकता है?

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

बाहर निकलने की विधि को देखता है, एक नया धागा पैदा करता है, और तब तक गिना जाता है जब तक कि धागा प्रतिबिंब के माध्यम से निकास को बुलाकर प्रक्रिया को मार नहीं देता।


गिना जाता है? ऐसा लगता है कि यह मेरे लिए मायने रखता है।
जस्टिन

1
एर, हाँ, अच्छी बात है। मुझे कहना चाहिए था कि काउंट अप, या बस कहा जाता है कि यह मायने रखता है जब तक यह बाहर नहीं निकलता।
डेविड कॉनराड

6

x86 मशीन भाषा, 1 वर्ण

आप आम तौर पर एक आरईटी अनुदेश से एक व्यावहारिक निष्पादन योग्य बना सकते हैं

\xC3 

4
यह कैसे अपरंपरागत है ?!
aditsu

6

सी (लिनक्स)

आत्महत्या का संस्करण

खुद के लिए एक हस्ताक्षर भेजता है।

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

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

    printf("Not killed");
}

"Tu quoque mi fili" संस्करण

कांटे, तो बेटा बाप को मार देता है।

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

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

    printf("Not killed");
}

5

पर्ल

...

बस इतना ही।


स्पष्टीकरण: यह अपवाद फेंकता है Unimplementedऔर तुरंत बाहर निकलता है।


जोड़ा गया स्पष्टीकरण।
PhiNotPi

3
मुझे नहीं पता, अपवाद उबाऊ हैं।

6
चुनौती अनुकूलन के कारण इनवैलिफ़: कोई अपवाद नहीं
s3lph

मैं अभी तक एक और जवाब लिखने के लिए चारों ओर नहीं मिला है।
PhiNotPi

5

बैच और डिबग

एक पुराना लेकिन गुडी, तत्काल सिस्टम रिबूट के लिए डॉस मशीनों पर काम करता है। इसमें बोनस यह दो अलग-अलग, असंगत व्याख्याकारों द्वारा व्याख्या की जाने वाली एक स्क्रिप्ट है।

reset.bat

goto start

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

बैच फ़ाइल व्याख्या डीबग के लिए दिए गए निर्देशों पर निर्भर करती है, और व्याख्या के लिए डीबग करने के लिए स्वयं फ़ीड करती है। के बाद की खाली लाइन gotoको debugउस परिणाम में त्रुटि को साफ करने की आवश्यकता होती है, क्योंकि इसे एक अज्ञात कमांड खिलाया जाता है, जो कि गोटो है।


1
मैं कुल्हाड़ी के समान काम करता था; कुल्हाड़ी धक्का; धक्का bx; रेटफ़
moopet

3

जावा

नीचे दिए गए कोड का परीक्षण नहीं किया गया है और यह केवल कुछ प्लेटफार्मों पर काम करेगा।

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

45
कि खराब सफेद स्थान के साथ क्या है
दरवाज़े

7
UNIX पर यह sudo rebootविंडोज पर होगाshutdown /r /t 0
s3lph

2
UNIX पर आपको बस उस प्रोग्राम को sudo के साथ निष्पादित करना है, न कि उस कमांड को जिसे आप निष्पादित करना चाहते हैं।
जोहान्स कुह्न

1
@ the_Seppi, @ जोहान्सकुहन जैसा मैंने कहा कि यह केवल कुछ प्लेटफार्मों पर काम करता है और मैं मान रहा था कि आप इसे लागू करने जा रहे हैं sudo java Quitter
एमोरी

3
-1 पर्याप्त सफेद नहीं !!!
vaxquis

3

शक्ति कोशिका

get-process | stop-process -force

इसे 'lastresort.ps1' के रूप में सहेजें और यह चाल करना चाहिए।

यदि आप स्क्रिप्ट में कुछ डंब पॉलिसी के कारण निष्पादित नहीं होने वाली समस्याओं में भाग लेते हैं, तो स्क्रिप्ट को निष्पादित करने से पहले इसे टाइप करें:

Set-ExecutionPolicy Unrestricted

एक स्क्रिप्ट के रूप में भी बचत के बिना कमांड लाइन से ठीक काम करता है।
इस्सी

3

टीआई-बेसिक 84

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

3

अजगर (ओपी के लिए एक लाइन विकल्प)

मुझे लगा कि ओपी ने जो सुझाव दिया था, उससे बेहतर पायथन जवाब नहीं था, लेकिन मुझे यह पसंद नहीं आया कि यह इतनी सारी लाइनें हैं, इसलिए यहाँ पर आप ठीक उसी तरह से करते हैं जैसे ओपी ने किया था लेकिन एक लाइन में:

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

आप इसे एक फंक्शन बना सकते हैं और यह आपके लिए काम करेगा।


3

मेरा अपना विचार, भाग नहीं

TIGCC (टेक्सास इंस्ट्रूमेंट्स के लिए TI-89, TI-89 टाइटेनियम, TI-92 +, TI-V200)

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

एक ही कैलकुलेटर के लिए TI-Basic

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

प्रोग्राम क्या करता है: पहले यह रैम से खुद को हटा देता है। (इसे रॉम पर मत डालें या यह काम नहीं करेगा ...) यह अभी भी चल सकता है क्योंकि निष्पादन पर प्रोग्राम की एक प्रति बनाई और निष्पादित की जाती है। asm(trap #2);ASM कमांड को आमंत्रित करता है 4E424E750000, जो कैलकुलेटर को रीसेट करने के लिए कमांड है, इसे हटा दें RAM (फ्लैश रोम अछूता रहता है) और सभी अनुप्रयोगों को पुनर्स्थापित करें।

संपादित करें: बस मूल संस्करण का परीक्षण किया। यह स्वयं को हटा नहीं सकता ...


3

MS-DOS .com प्रारूप

यह मेमोरी में अमान्य निर्देश (FFFF) लिखता है और फिर उन्हें कार्यान्वित करता है, जिससे NTVDM क्रैश हो जाता है।

हेक्साडेसिमल

B8 FF FF A3 06 01

Debug.exe असेंबली भाषा

MOV AX, FFFF
MOV [0106],AX
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.