कम्प्यूटर बंद कीजिए!


83

चुनौती:

अपनी पसंद की प्रोग्रामिंग भाषा में, उस मशीन को बंद कर दें जिस पर आपका कोड निष्पादित किया गया था।

नियम

  • संसाधन थकावट द्वारा बंद नहीं करना (जैसे: शट डाउन को बल देने के लिए फोरबॉम्ब)
  • आपको कोड लिखने की अनुमति है जो केवल एक विशिष्ट वातावरण / ओएस में काम करता है, यदि आप चाहें।
  • मानक खामियों को मना किया जाता है

यह , इस प्रकार बाइट्स की सबसे कम राशि जीतती है!


62
मुझे दोस्त मिले, जो स्कूल में ऐसा करते हैं और सोचते हैं कि वे 'हैकिंग' कर रहे हैं: D
RaisingAgent

12
हमें इस तरह के `whatever`;बैश / पर्ल / PHP / रूबी / आदि को रोकने के लिए एक बार कुछ नियम के साथ आना चाहिए । stupiglots।
मैनटवर्क

260
विंडोज, 0 बाइट्स। कंप्यूटर को कुछ दिनों के लिए छोड़ दें और स्वचालित अपडेट को अपना काम करने दें
लुइस मेन्डो

28
कोई और TIO- लिंक की कमी को नोटिस करता है?
स्टेनबर्घ

8
@MontyHarder कि पेज पढ़ने के बाद मैं अवधि सिक्के का फैसला किया हैshatdown: past tense of the verb shutdown
FGreg

जवाबों:


92

असेंबली (x86 / x64, लिनक्स, के रूप में) , 22 21 19 बाइट्स

mov  $0x58,       %al  # 2 bytes: b0 58
mov  $0xfee1dead, %ebx # 5 bytes: bb ad de e1 fe
mov  $0x28121969, %ecx # 5 bytes: b9 69 19 12 28
mov  $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
int  $0x80             # 2 bytes: cd 80

जड़ के रूप में चलाया जाना चाहिए।

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

परीक्षण चालन

$ as -o poweroff.o poweroff.s
$ ld -o poweroff   poweroff.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400078
$ sudo sh -c 'sync && ./poweroff'
root's password:

अंधेरे से पीछा किया।

यह काम किस प्रकार करता है

int $0x80एक सॉफ्टवेयर रुकावट को आमंत्रित करता है। यह x86 और x64 दोनों पर काम करता है, लेकिन अब एक दशक से अधिक के लिए पदावनत कर दिया गया है और इसका उपयोग उत्पादन कोड में नहीं किया जाना चाहिए। syscallइसके बजाय x64 कोड का उपयोग करना चाहिए । x86 का उपयोग करना चाहिए sysenter, लेकिन यह कोड गोल्फ के लिए बहुत बोझिल है।

Syscall से परिणामी कार्रवाई रजिस्टरों EAX - EDX, ESI और EDI पर निर्भर करती है। लिनक्स syscall संदर्भ सभी syscalls कि माध्यम से उपलब्ध हैं पता चलता int $0x80

जब EAX 0x58 (88) रखता है , तो रिबूट को कहा जाता है, जिसका उपयोग बिजली बंद करने, सोने के लिए, या कंप्यूटर को हाइबरनेट करने के साथ-साथ गुठली स्विच करने और Ctrl - Alt - Del keybo को सक्षम या सक्षम करने के लिए भी किया जा सकता है ।

कार्यक्रम की शुरुआत में - और asया के साथ संकलन करके gcc -nostdlib, हम यह सुनिश्चित कर सकते हैं कि हम वास्तव में कार्यक्रम की शुरुआत में हैं - अधिकांश रजिस्टर 0 पर सेट हैं । यह EAX भी शामिल है, इसलिए हम उपयोग कर सकते हैं mov $0x58, %alकरने के लिए EAX के निचले 8 बिट सेट करने के लिए 0x58 इस प्रकार EAX ही स्थापित करने के लिए, 0x58 । यह दो बाइट्स को मैन्युअल रूप से रजिस्टर को शून्य करने से बचाता है xor %eax, %eaxऔर स्ट्रेचेफोवर्ड पर एक और अधिक है mov $0x58, %eaxजो 32 बिट्स में 0x58 को एन्कोड करता है ।

रिबूट करने के लिए पहले दो तर्क जादू की संख्या हैं, संभवतः आकस्मिक रिबूट को रोकने के लिए, और रजिस्टर ईबीएक्स और ईसीएक्स से पढ़ा जाता है। जब तक ये संख्या कुछ स्थिरांक के बराबर नहीं होती, रिबूट किसी भी कार्रवाई को करने से इनकार करता है।

  • पहले मैजिक नंबर को 0xfee1dead ( मृत महसूस करना) के बराबर होना चाहिए , शायद पीसी की पावर ऑफ / डेथ का जिक्र हो।

  • दूसरी मैजिक संख्या चार अलग-अलग स्थिरांक के बराबर हो सकती है, हालांकि बाद के तीन लिनक्स के प्राचीन संस्करणों में काम नहीं करते थे। उन सभी को पीसी के जन्म के बाद की शक्ति का उल्लेख लगता है।

    • 0x28121969 लिनस टॉर्वाल्ड्स के जन्मदिन (28 दिसंबर, 1969) का प्रतिनिधित्व करता है।

    • 0x05121996 पेट्रीसिया टॉर्वाल्ड्स के जन्मदिन (5 दिसंबर, 1996) का प्रतिनिधित्व करता है।

    • 0x16041998 डैनियल टोरवाल्ड्स के जन्मदिन (16 अप्रैल, 1998) का प्रतिनिधित्व करता है।

    • 0x20112000 सेलेस्ट टॉर्वाल्ड्स के जन्मदिन (20 नवंबर, 2000) का प्रतिनिधित्व करता है।

    पेट्रीसिया, डेनिएला और सेलेस्टे टॉर्वाल्ड्स लिनुस टॉर्वाल्ड्स की तीन बेटियां हैं।

  • EDX रजिस्टर "रिबूट" के प्रकार का चयन करता है जिसे हम चाहते हैं। 0x4321fedc है RB_POWER_OFF , पीसी नीचे बंद और इसे बंद शक्ति।

  • अंत में, ESI रजिस्टर के मूल्य को RB_POWER_OFF के लिए अनदेखा किया जाता है ; EDI रजिस्टर के मूल्य को पूरी तरह से रिबूट द्वारा अनदेखा किया गया है ।

वैकल्पिक संस्करण, x64- केवल, 19 बाइट्स

X64 पर, हम एक ही बाइट काउंट के लिए एक उचित syscall का उपयोग कर सकते हैं।

mov     $0xa9,       %al  # 2 bytes: b0 a9
mov     $0xfee1dead, %edi # 5 bytes: bf ad de e1 fe
mov     $0x28121969, %esi # 5 bytes: be 69 19 12 28
mov     $0x4321fedc, %edx # 5 bytes: ba dc fe 21 43
syscall                   # 2 bytes: 0f 05

केवल अंतर निर्देश ( syscallबनाम int $0x80), __NR_REBOOT ( 0xa9 बनाम 0x58 ), और शामिल रजिस्टरों के मूल्य में निहित है


क्या हम आम तौर पर असेंबली के रूप में असेंबल बाइट्स की गणना करते हैं, जैसे कि एक्साइड हैडर के लिए आवश्यक फ्रेमिंग बाइट्स?
जोशुआ

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

क्या आप कोड के संयोजन के बाद हेक्स डंप जोड़ सकते हैं?
ckjbgames 16


मैं fee1तो deadअब ठीक है।
आर्म

49

पॉवरशेल, 13 बाइट्स

Stop-Computer

बहुत आत्म-व्याख्यात्मक? PowerShell कोर पर काम नहीं करता है, इसलिए यह Linux / MacOS के लिए PowerShell पर काम नहीं करेगा (पहले से ही TIO: -D पर इसे आज़मा चुका है)।

बोनस कचरा सबमिशन, 12 बाइट्स

gcm s*r|iex

मेरे परीक्षण में, यह PowerShell 2.0 के साथ विंडोज 2003 पर काम करता है। यह अधिकांश नए संस्करणों पर काम नहीं करेगा, और यह काम नहीं कर सकता है जिसके आधार पर मॉड्यूल स्थापित किए गए हैं। यह काफी भयानक है!

यह किसी भी पैटर्न के लिए आदेशों की सूची खोजता है s*rऔर फिर उन सभी को चलाता है! स्पष्ट होने के लिए, यह खतरनाक है, ऐसा मत करो!

पाठ्यक्रम की चाल, उन कमांडों की एक सूची प्राप्त कर रही है जिनके पास कोई अनिवार्य पैरामीटर नहीं है, अन्यथा PowerShell एक मूल्य के लिए संकेत देगा।

मेरी 2003 की मशीन पर, यह जो 3 कमांड देता है वह है:

CommandType     Name                                                Definition                                         
-----------     ----                                                ----------                                         
Application     scrnsave.scr                                        C:\WINDOWS\system32\scrnsave.scr                   
Application     ssmarque.scr                                        C:\WINDOWS\system32\ssmarque.scr                   
Cmdlet          Stop-Computer                                       Stop-Computer [[-ComputerName] <String[]>] [[-Cr...

हां, यह मार्की स्क्रीनसेवर लॉन्च करता है, लेकिन नहीं, यह लॉन्च होने से पहले इसके पूरा होने का इंतजार नहीं करता है Stop-Computer

यह दृष्टिकोण नई मशीनों पर काम कर सकता है, फिर से किस मॉड्यूल पर निर्भर करता है, लेकिन विंडोज 2012 और 2016 में मैं जो सबसे अच्छा कर सकता था वह 14 बाइट्स थे :

gcm sto*er|iex

(और हाँ, निश्चित रूप से, winbatch सबमिशन PowerShell में काम करेगा और यह छोटा है, लेकिन .. यह कोई मज़ेदार नहीं है)


4
Win7 & Win10 के लिए एक छोटा (और शायद अधिक): gcm *p-c*|iex- और केवल एक ही परिणाम है!
बॉब

@ याकूब अभी भी स्थापित मॉड्यूल पर अत्यधिक निर्भर है; मेरे Win10 मशीन पर यह 6 परिणाम देता है, जिनमें से कई अनिवार्य पैरामीटर होंगे (इसलिए वे शीघ्र और इसे कभी नहीं बनाएंगे Stop-Computer, जो अंतिम परिणाम है)।
रिश्वतवादी

39

बैच, 10 बाइट्स

खिड़कियों पर, यह पर्याप्त होगा

shutdown/s

यह एक मिनट में शटडाउन सेट कर देगा।

वैकल्पिक रूप से, जैसा कि @flashbang बताते हैं:

shutdown/p

इससे कंप्यूटर तुरंत बंद हो जाता है।


79
Press the big button on the front of your computer= 0 बाइट्स
13

96
@RaisingAgent यहाँ PPCG में हम कोड में अपनी समस्याओं को हल करते हैं। शारीरिक श्रम पर ध्यान दिया जाता है।

12
@steenbergh मुझे नहीं पता ... 10 केस्ट्रोक्स बनाम एक बड़ा बटन दबाने पर? मैं बटन के साथ जाऊँगा
WorldSEnder

16
@RaisingAgent आपके प्रस्ताव में मापनीयता के मुद्दे हैं। इसे सप्ताह में चार बार 10.000 कंप्यूटरों के लिए करने का प्रयास करें।
एमिलियो एम बुमाचार

10
@RaisingAgent असली पुरुष स्विच का उपयोग करते हैं जो PSU पर सही है
क्रंचर

35

x86 मशीन कोड, लेनोवो Z510, डॉस COM या बूटलोडर, 7 बाइट्स

BITS 16

mov ax, (1 << 13) | (7 << 10)
mov dx, 1804h
out dx, ax

में इकट्ठे हुए B8 00 3C BA 04 18 EF

मैं शोषण कर रहा हूं " आपको कोड लिखने की अनुमति है जो केवल एक विशिष्ट वातावरण / ओएस में काम करता है, यदि आप चाहें तो " अंतिम स्तर तक: यह केवल लेनोवो जेड 510 1 पर काम करेगा ।

यह एसीपीआई रजिस्टर SLP_TYPa << 10 | SLP_ENको लिखता है PM1a_CNT, मैंने शटडाउन के बारे में एक जवाब के लिए महीनों पहले एसीपीआई तालिकाओं से इस मान को डंप किया (जहां मैं ऊपर दिए गए कोड को थोड़ा संदर्भ देता हूं)।

इसे या तो डॉस के तहत कॉम के रूप में चलाया जा सकता है (बस एक फाइल में बाइनरी डेटा लिखें और एक्सटेंशन को "कॉम" में बदल दें) या एक बूटलोडर के रूप में।
उत्तरार्द्ध के लिए मानक हस्ताक्षर लिखें और आधुनिक फर्मवेयर के साथ मुद्दों से सावधान रहें


1 कड़ाई से सच नहीं है, एसीपीआई कॉन्फ़िगरेशन के समान होने वाली कोई भी प्रणाली भी बंद हो जाएगी।


13
सीमित मंच के कारण अपवित्र।
पाइप

हा! किसी ने डेनिस को हराया!
जोशुआ

यदि आप 7-बाइट की गिनती के साथ जा रहे हैं, तो आपको इसे विधानसभा समाधान के बजाय मशीन कोड सबमिशन कहना चाहिए। विधानसभा प्रस्तुत 63 बाइट्स है।
जकोब

@ जाकोब आप सही कह रहे हैं!
मार्गरेट ब्लूम

आप इस प्रश्न का उत्तर देने के लिए सही व्यक्ति की तरह दिखते हैं: stackoverflow.com/questions/2019463/… (मैं इस पर बुरी तरह से विफल रहा, शर्म से मेरा "उत्तर" हटाना पड़ा।)
प्रो। फाकलेन

34

GRUB शेल , 4 बाइट्स

golfed

halt

कमान: पड़ाव- कोई-एपीएम

कमांड कंप्यूटर को रोकती है। यदि - कोई-एपीएम विकल्प निर्दिष्ट नहीं किया जाता है, तो कोई एपीएम BIOS कॉल नहीं किया जाता है। अन्यथा, APM का उपयोग करके कंप्यूटर बंद कर दिया जाता है।

बोनस

यहाँ एक प्रमाण है कि GRUB शेल वास्तव में Tur n ing-complete (टिप्पणियों को देखें):

यहाँ छवि विवरण दर्ज करें


ग्रब शेल एक "प्रोग्रामिंग भाषा" नहीं है - यह ट्यूरिंग पूर्ण नहीं है
Alnitak

9
@ अलनीतक, आपको क्या लगता है? यह बहुत उन्नत है built-in scripting language, which has a syntax quite similar to that of GNU Bash and other Bourne shell derivativesऔर चर, सशर्त निर्माण, कार्यों और अधिक का समर्थन करता है , तो जाहिर है, यह किसी भी उपाय से टर्निंग-पूर्ण है।
ज़ेप्लेन

1
ठीक है, मैं उसे वापस ले
जाऊंगा

28
जब यह स्पिनर प्रदर्शित नहीं कर सकता है तो यह स्पष्ट रूप से तूर एन
इंग

1
बैश में यह एक ही कमांड है।
पावेल टोकरज

31

65C02 मशीन कोड, 1 बाइट

एसटीपी निर्देश (0xDB):

STP 65C02 के क्लॉक इनपुट को बंद कर देता है, हार्डवेयर रीसेट होने तक प्रभावी रूप से 65C02 को बंद कर देता है (यानी RES पिन कम हो जाता है)। यह 65C02 को कम बिजली की स्थिति में डालता है। यह उन अनुप्रयोगों (सर्किट) के लिए उपयोगी है, जिन्हें कम बिजली की खपत की आवश्यकता होती है, लेकिन एसटीपी शायद ही कभी देखा जाता है।

(स्रोत: http://www.6502.org/tutorials/65c02opcodes.html )

xxd डंप:

00000000: db                                       .

Noice। मैं दिन में वापस एक Apple II हैकर था और इस opcode को याद भी नहीं था।
किंडल

1
हाँ, अधिक सुविधाओं के साथ एक 65c816 एमुलेटर लिखने के बाद और इस चुनौती को मैंने देखा कि मैं जानता था कि मुझे क्या करना है: P इसके अलावा, ऐसा लगता है कि यह केवल 1 बाइट का उत्तर है! \ o /
therealfarfetchd

24

मतलाब, 21 बाइट्स

system('shutdown -s')

मैंने यह कोशिश नहीं की है (दिन के बीच में पुनरारंभ करने के लिए सभी कार्यक्रमों को बंद करना वास्तव में आकर्षक नहीं है), लेकिन यह काम करना चाहिए। । यह काम...

मैं बाद में एक छोटी व्याख्या जोड़ूंगा, मेरा लैपटॉप फिलहाल बंद है।


105
"मैं बाद में एक छोटी व्याख्या जोड़ूंगा, मेरा लैपटॉप फिलहाल बंद है।" <- शटडाउन चुनौती का खतरा
स्वेवर

4
Axaxaxaxa, ठीक है, अपने कंप्यूटर को एक बार फिर से शुरू करना हर बार खराब नहीं हो सकता है :)
RaisingAgent

6
uptimeहालांकि, आपकी बर्बादी होती है
वेन वर्नर

इसे shutdown -sशेल के रूप में प्रस्तुत करने के बजाय MATLAB के रूप में क्यों प्रस्तुत करें ?
इबिबिस

10
क्योंकि मेरे लिए, शेल या तो कुछ है जो मुझे समुद्र तट पर मिलता है, या एक गैस स्टेशन।
स्टिव ग्रिफिन

21

MATLAB, 11 बाइट्स

!shutdown/p

स्टीवी ग्रिफिन के दृष्टिकोण के समान । हालांकि, MATLAB में सिस्टम कमांड को लागू करने के छोटे तरीके हैं; इस मामले में, !का उपयोग किया जाता है। विंडोज को .exeकमांड के नाम की जरूरत नहीं है , इसलिए इसे छोड़ दिया गया है। /विकल्प अभी भी समर्थित (मैं Windows 10 चल रहा हूँ), और अंतरिक्ष के लिए की जरूरत को नकारता है। विकल्प हैं:

system shutdown/p % 17 bytes; uses so-called 'command' syntax.
dos shutdown/p    % 14 bytes; the 'dos' command can be used just as well.

19

स्माइलबासिक, 14 11 6 बाइट्स

OPTION

3DS को पुनरारंभ करने के लिए एक क्रैश ट्रिगर करता है। मुझे उम्मीद है कि यह मायने रखता है।

सबसे हाल के संस्करण में काम करता है।


मुझे लगा कि यह पैच हो गया है ... कृपया एक संस्करण संख्या शामिल करें।
wizzwizz4

3
इसे 3.5 संस्करण में पैच किया गया है, जो अभी तक जापान के बाहर जारी नहीं किया गया है।
12M2121

4
@ 12Me21 यकीन है कि यह मायने रखता है। पर्यावरण का अच्छा विकल्प।
पी। केंटिनो

यदि केवल REBOOTSBv2 से मान्य उत्तर के रूप में गिना जाता है।
घोंघा_

16

बैश, 7 6 बाइट्स

init 0

यह मानते हुए कि कार्यक्रम रूट के रूप में चलाया जाता है।


दरअसल, मशीन को बंद करने की आवश्यकता होती है। इस प्रकार आपको एक मान्य उत्तर के रूप में 'पड़ाव-पी' की आवश्यकता है
पी। केटिनो

4
यह संपादन हत्याकांड :)
राइजिंगएजेंट

@ P.Ktinos: poweroffएक एकल शब्द है, हालांकि थोड़ा और अक्षर।
ccpizza

1
@ccpizza राइट, लेकिन विशिष्ट स्कोरिंग मापदंड बाइट काउंट है
स्वेवर

13

जावा, 101 98 62 42 बाइट्स

()->{Runtime.getRuntime().exec("init 0");}

जैसा कि @Snowman ने कहा, यह सवाल निर्दिष्ट नहीं करता है कि क्या एक पूर्ण कार्यक्रम की आवश्यकता थी, इसलिए यह अभी भी स्वीकार्य होना चाहिए।


2
यह बदलने के लिए छोटा है classके साथ interfaceके रूप में है कि आप छोड़ करने की अनुमति देता publicमुख्य से।
पावेल

6
आप एक विधि का उपयोग कर सकते हैं, क्योंकि प्रश्न ने यह निर्दिष्ट नहीं किया है कि सबमिशन पूरा प्रोग्राम होना चाहिए:void f()throws Exception{Runtime.getRuntime().exec("shutdown/s");}

1
क्या लिनक्स संस्करण थोड़ा छोटा नहीं होगा ?
jpmc26

2
()->{Runtime.getRuntime().exec("init 0");}या अस्थायी रूप से ()->Runtime.getRuntime().exec("init 0")(फिलहाल जांच नहीं कर सकते हैं)। यह एक लैंबडा है जो एक कस्टम शून्य, नो-आर्ग्स-थ्रोइंग इंटरफ़ेस को लागू करता है।
ओलिवियर ग्रेजायर

1
इसे लिनक्स-विशिष्ट उत्तर के रूप में लेबल किया जाना चाहिए, उदाहरण के लिए "जावा ऑन LInux"।
जैकब

13

पायथन 2, 29 बाइट्स

import os;os.system('init 0')

लिनक्स सिस्टम पर काम करता है और रूट विशेषाधिकार की जरूरत है।

विंडोज के लिए, 33 बाइट्स

import os;os.system('shutdown/p')

यह सिर्फ सबसे कम दिलचस्प या सहायक कोड हो सकता है जो मैंने कभी लिखा है।


2
किसी और ने लिनक्स शेल संस्करण पोस्ट किया है।
jpmc26

1
आह ठीक है, मेरा बुरा ..
FlipTack

12

कमोडोर 64, 11 बाइट्स

0 sys64738

यह BASIC प्रॉम्प्ट से है। या ...

कमोडोर 64, 6502 असेंबली, 3 बाइट्स (इकट्ठे), 16 बाइट्स (स्रोत)

*=8000
JMP $FCE2

मुझे लगता है कि बेसिक से कमोडोर 64 के प्रत्यक्ष इनपुट मोड sys64738का उपयोग करने के साथ शून्य बाइट का उपयोग करेगा क्योंकि स्टोर करने के लिए कोई कार्यक्रम या कुछ और नहीं है; आप स्क्रीन रैम का उपयोग कर रहे हैं, लेकिन वह रैम पहले से ही रिक्त स्थान से भरा होगा, इसलिए आप उन स्थानों को टेक्स्ट से बदल रहे हैं।
शॉन बेबर्स

2
स्रोत कोड स्थान लेता है। सिर्फ इसलिए कि यह लक्ष्य मशीन पर स्थान आरक्षित नहीं करता है इसका मतलब यह नहीं है कि यह 0 बाइट्स लेता है। अन्यथा उत्तर `` होगा।
wizzwizz4

3
आपको 0और के बीच की जगह की आवश्यकता नहीं है sys64738, आप sysशॉर्टकट फॉर्म के साथ बदल सकते हैं sY, और मैं प्रोग्राम की लंबाई में अनुगामी न्यूलाइन की गिनती नहीं करता हूं। हालांकि, मुझे नहीं लगता कि आपका कोड आवश्यकताओं को पूरा करता है: 64738 पर कोड एक सॉफ्ट रीसेट करता है, न कि पावरऑफ।
मार्क

2
बिजली बंद नहीं करता।
TecBrat

1
मैंने एक बार अपने कमोडोर 64 पर बीयर गिराई, जो इसे स्थायी रूप से संचालित करता है। क्या यह गिनती है?
शॉन बेबर्स 15

12

TI-Nspire CX CAS, 3 बाइट्स

" "+" "

दो खाली तारों को जोड़ो।

कैलकुलेटर के पुराने संस्करण पर, यह डिवाइस को क्रैश कर देगा और इसे रीबूट करने का कारण बनेगा (भौतिक बटन संयोजनों के अलावा रिबूट के बिना डिवाइस को बंद करने का कोई तरीका नहीं है)।

Adriweb द्वारा वीडियो


7 बाइट्स नहीं है?
रोमन ग्रैफ़


मुझे यकीन है लगता है।
रोमन ग्रैफ

11

सी ++, 51 40 बाइट्स

-11 बाइट्स Ingve के लिए धन्यवाद !

#include<os>
int main(){OS::shutdown();}

में ही काम करता है IncludeOS (v0.10.0-rc.1)

परीक्षा:

$ pwd
/home/simon/IncludeOS/examples/demo_service

$ cat service.cpp
#include<os>
int main(){OS::shutdown();}

$ mkdir build && cd build && cmake .. && make && cd ..
[...]

$ boot build/IncludeOS_example
[...]
================================================================================
================================================================================
 IncludeOS v0.10.0-rc.1-9-g151a2b9
 +--> Running [ IncludeOS minimal example ]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$

1
अब मैं शामिल करने के बारे में उत्सुक हूं
कार्ल

@KarlNapf अल्फ्रेड ने CppCon 2016 में एक बड़ी प्रस्तुति का आयोजन किया। इसमें शामिल हैं: youtube.com/watch?v=t4etEwG2_LY यदि आप अधिक जानना चाहते हैं :-)
simon

1
आपको उपयोग करने की आवश्यकता नहीं है void Service::start, इसमें शामिल भी int main काम करता है
Ingve

10

AppleScript, 30 बाइट्स

tell app "Finder" to shut down

ठीक यही कहता है: फाइंडर को कंप्यूटर बंद करने के लिए कहता है।


9

ऑटोहॉटकी, 11 10 बाइट्स

गुरुपद ममदापुर के लिए एक बाइट धन्यवाद

Shutdown,9

AHK डिफ़ॉल्ट रूप से शटडाउन कमांड का समर्थन करता है। 9एक ध्वज से मिलकर है, Shutdown=1+ PowerDown=8


1
AHKरहस्यमय है।
गुरुपाद ममदापुर

क्या अल्पविराम के बाद आपको स्थान की आवश्यकता है?
उपचारार्थी

अंतरिक्ष की ,जरूरत नहीं है। एक अलग ध्वज के साथ इसका परीक्षण करने का प्रयास करें। मैंने सोचा कि यह तुरंत कंप्यूटर को बंद नहीं करेगा, और इसे मेरी मुख्य स्क्रिप्ट में डाल देगा जो स्टार्टअप पर लोड होता है: डी अब मुझे सुरक्षित मोड में लोड करना और समस्या को हल करना है। आह।
गुरुपाद ममदापुर १५

9

मशीन कोड (x86, बूट लोडर) 18 बाइट्स

b8 01 53 33 db cd 15 b8 07 53 bb 01 00 b9 03 00 cd 15

disassembly:

mov ax, 0x5301 ; connect to real-mode APM services
xor bx, bx     ; device id 0 - APM BIOS
int 0x15       ; call APM
mov ax, 0x5307 ; set power state
mov bx, 0x0001 ; on all devices
mov cx, 0x0003 ; to Off
int 0x15       ; call APM

आप निम्न आदेशों के साथ Bochs के डिबगर में इसका परीक्षण कर सकते हैं (सिमुलेशन शुरू करने के बाद, कुछ डिस्क ड्राइव सेट अप करें):

pb 0x7c00
c
setpmem 0x7c00 4 0x335301b8
setpmem 0x7c04 4 0xb815cddb
setpmem 0x7c08 4 0x01bb5307
setpmem 0x7c0c 4 0x0003b900
setpmem 0x7c10 2 0x15cd
c

यह वही मशीन कोड एक डॉस एक्जीक्यूटेबल ( *.COM) के रूप में भी काम करेगा ।


7

सी #, 79 54 53 बाइट्स

यह विंडोज पर काम करता है।

79 बाइट्स :

class _{static void Main(){System.Diagnostics.Process.Start("shutdown","/s");}}

53 बाइट्स , TheLethalCoder का धन्यवाद:

_=>System.Diagnostics.Process.Start("shutdown","/s");

2
नोट चुनौती एक पूर्ण कार्यक्रम की आवश्यकता नहीं है और एक इनपुट (बेशक अप्रयुक्त) लेने की अनुमति नहीं देने नहीं करता है तो आप एक के लिए संकलन कर सकता है Action<int>और ऐसा _=>System.Diagnostics.Process.Start("shutdown", "/s");54 बाइट्स के लिए।
TheLethalCoder

@ TheLethalCoder, अद्यतन, धन्यवाद!
दारिउज़ वोयनायक

आप अनावश्यक स्थान को भी हटा सकते हैं।
नॉट्रो

हाँ बिल्कु्ल! धन्यवाद, @nothrow :)
दारिउज़ Woźniak

6

ऑटो इट, 11 बाइट्स

Shutdown(1)

शटडाउन फ़ंक्शन को निम्नलिखित कोड का संयोजन मिलता है

0 = Logoff
1 = Shutdown
2 = Reboot
4 = Force
8 = Power down
16= Force if hung
32= Standby
64= Hibernate

उदाहरण के लिए शटडाउन और पावर डाउन करने के लिए, कोड 9 (शटडाउन + पावर डाउन = 1 + 8 = 9) होगा।


1
0(लॉगऑफ़) यहाँ एक विशेष मामला है; यह स्टैंडबाय या हाइबरनेट के साथ अंतर्निहित रूप से संयोजित नहीं होता है।
wizzwizz4

ठीक है0 + 32 = 32
rahnema1

हम्म, तो यह हमेशा स्टैंडबाय / हाइबरनेशन पर जाने से पहले लॉग ऑफ करता है?
रुस्लान

@Ruslan मुझे ठीक से पता नहीं है कि यह कैसे काम करता है, आप अधिक राय प्राप्त करने के लिए AutoIt उपयोगकर्ता मंच का उल्लेख कर सकते हैं :-)
rahnema1

6

विंडोज - नेटिवएपीआई, 212 बाइट्स

ठीक है यह वास्तव में सबसे छोटा संस्करण नहीं है। लेकिन शायद कुछ के लिए दिलचस्प। यह Win32 सबसिस्टम पर निष्पादित नहीं होगा । हालाँकि यह देशी एपीआई (जैसे autochk.exe करता है) के संदर्भ में निष्पादित होने पर चलेगा

कोड

#define WIN32_NO_STATUS
#include <windef.h>
#include <winnt.h>
#include <ntndk.h>
NTSTATUS main() {
RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,NULL);
return ZwShutdownSystem(ShutdownPowerOff);
}

निर्माण

इसे बनाने के लिए या तो WinDDK build.exeटूल का उपयोग करें (एक उपयुक्त sourceफ़ाइल के लिए)NMAKE )

या संकलन और लिंक करने के लिए इन कमांड का उपयोग करें:

cl /Gd /D_X86_ /showIncludes /I%DDK_INC_PATH% /I%CRT_INC_PATH% /c main.c
link /verbose /nodefaultlib /subsystem:native /machine:X86 /entry:NtProcessStartup@4 C:\WinDDK\7600.16385.1\lib\win7\i386\nt.lib C:\WinDDK\7600.16385.1\lib\win7\i386\ntdllp.lib C:\WinDDK\7600.16385.1\lib\win7\i386\BufferOverflow.lib .\main.obj 

नोट: यह एक x86 देशी निष्पादन योग्य का निर्माण करेगा। यदि आप इसे अलग आर्किटेक्चर के लिए बनाना चाहते हैं तो उपयुक्त बिट्स बदलें।

परीक्षा

मूल निष्पादन योग्य का परीक्षण करने के लिए आपको win32 सबसिस्टम लोड होने से पहले इसे निष्पादित करना होगा । इसे करने का एक सामान्य तरीका निम्नलिखित रजिस्ट्री कुंजी में निष्पादन योग्य को जोड़ना है:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute

चेतावनी

यदि आप ऐसा करते हैं, तो आपके पास लक्ष्य ओएस के रजिस्ट्री हाइव को दूसरे ओएस से संपादित करने का विकल्प होना चाहिए। चूंकि अब आप लक्ष्य ओएस बूट नहीं कर पाएंगे!

मैंने इसे वीएम पर किया था जहां मैं आसानी से पिछले स्नैपशॉट पर वापस लौट सकता था!



5

अधिकांश लिनक्स गोले, 15 बाइट्स

# echo o>/p*/*ger

यदि आप ऐसा करते हैं तो यह 11 बाइट्स लंबा हो सकता है /proc निर्देशिका :

# echo o>*ger

यह बहुत सीधा है (इसमें कोई साइड इफेक्ट नहीं है, जैसे कि फाइल सिस्टम को अनमाउंट करना या हत्या करना) और बल्कि क्रूर।


1
पिछली बार जब मैंने रिडायरेक्ट पर वाइल्डकार्ड के विस्तार की कोशिश की, तो इसमें एक वाइल्डकार्ड के साथ एक फाइल तैयार की गई थी, जिसमें एक मेल फाइल मौजूद थी।
जोशुआ

5
मेरा मानना ​​है कि आपको अपने बाइट की गिनती में "/ proc /" जोड़ना होगा
zeppelin

@ जोशुआ यह शेल पर निर्भर हो सकता है। मैंने वास्तव में इसे ( bashअपने कंप्यूटर पर) :-)
राडोवन गारबिक

1
@ रादोवन गर्बिक - मुझे नहीं लगता कि यह वास्तव में वैध है। यह मूल रूप से यह अर्थ लगाने के समान है कि एक उपनाम "पी = पॉवरऑफ़" (जो "असंभव" भी नहीं है) और "पी" का दावा करने के लिए एक वैध 1 बाइट समाधान है।
ज़ेप्लेन

1
लेकिन आप शायद इसे सिर्फ 3 बाइट्स की कीमत पर वैध बना सकते हैं, जैसेecho o>/p*/*ger
zeppelin


5

AppleScript, 44 बाइट्स

tell application "Finder"
shut down
end tell

मुझे नहीं पता कि AppleScript सिंटैक्स कैसे काम करता है या कुछ भी, इसलिए यदि कोई जानता है कि इसे कैसे छोटा किया जाए, तो कृपया बताएं।

इसके अलावा, मैं अपने फोन पर स्कूल में ("हैकिंग") कर रहा हूं, इसलिए मैं इसका परीक्षण नहीं कर सकता।

14 कम बाइट्स (धन्यवाद देने के लिए) आप कह सकते हैं

tell app "Finder" to shut down

आपके द्वारा कुछ घंटों के बाद (उसी कार्यक्रम के साथ) एक छोटे से समाधान के साथ कोई आया था (लेकिन यहां टिप्पणी करने के बजाय इसे पोस्ट किया गया) codegolf.stackexchange.com/a/107958/62824
devRicher

आप शायद इंडेंटेशन निकाल सकते हैं
साइओस

4
tell app "Finder" to shut downकाम करना चाहिए, मेरा मानना ​​है (हालांकि संकलन 'एप्लिकेशन' को 'एप्लिकेशन' से बदल सकता है)।
किंडल

4

जे, 14 बाइट्स

2!:0'poweroff'

लिनक्स सिस्टम पर काम करता है। 2!:0में स्ट्रिंग निष्पादित करता है /bin/sh


4

क्लोजर, 40 39 बाइट्स

(.exec(Runtime/getRuntime)"shutdown/s")

से झंडा बदलकर -1 बाइट -sके लिए/s है, जो मुझे अंतरिक्ष से छुटकारा पाने के लिए अनुमति दी।

मूल रूप से जावा उत्तर।

यह परीक्षण मजेदार था। विंडोज ने मेरे सर्फेस पर एक फर्मवेयर अपडेट करने का फैसला किया, दूसरा इसे बंद कर दिया। बेशक।

(defn shutdown []
  (.exec (Runtime/getRuntime) "shutdown -s"))

2

नोड.जेएस, 39 बाइट्स

लिनक्स

require('child_process').exec('init 0')


2

सी ++, 48 47 (विंडोज) 46 45 (लिनक्स) बाइट्स

स्नोमैन के लिए 1 बाइट का धन्यवाद हटा दिया गया

#include<cstdlib>
main(){system("shutdown/p");}

यह विंडोज़ के लिए सिस्टम को बंद करना चाहिए

#include<cstdlib>
main(){system("poweroff");}

यह लिनक्स के लिए सिस्टम को बंद करना चाहिए


क्या आपको जरूरत है ;?
राइजिंगएजेंट

1
@LliwTelracs बहुत यकीन है कि यह "शटडाउन / पी" है और "-पी" नहीं है और अंतरिक्ष की आवश्यकता नहीं है।
पी। केटिनो

अर्धविराम को उचित c ++ सिंटैक्स के लिए आवश्यक है, स्लैश का उपयोग करके खिड़कियों के लिए एक छोटे से उत्तर की अनुमति देता है, लेकिन यह लिनक्स के लिए अब काम नहीं करता है। हालाँकि मैंने शटडाउन के लिए गलत चरित्र जोड़ा है जो विंडोज़ और लिनक्स के बीच साझा किया गया है
fɛnɪtɪk

@LliwTelracs यद्यपि आप जो चाहें कर सकते हैं, मैं 2 नियम का दुरुपयोग करने और लिनक्स कार्यक्षमता के बारे में परवाह नहीं करने का सुझाव देता हूं, क्योंकि यह एक कोड-गोल्फ है और बाइट्स की कम मात्रा बेहतर है।
पी। केंटिनो

1
#include<cstdlib>एक बाइट दाढ़ी होगी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.