2015-06-16 7 views
9

जब मैं शुभारंभजीएचसीआई में निष्पादन को कैसे रोकें?

ghci> last [0..] 

मैं Ctrl + C के साथ इसे बाधित कर सकते हैं।

हालांकि

ghci> last (repeat 0) 

Ctrl + C के साथ निरस्त नहीं किया जा सकता। जीएचसीआई चुपचाप कीस्ट्रोक को अनदेखा करता है।

जीएचसीआई में इस आदेश को कैसे रद्द करें? क्या यह एक बग है?

+0

मैं भी इस पर गौर किया, तो मैं एक जवाब को देखने के लिए खुशी है कि, भी हो जाएगा। शायद यह * एक बग है? – AJFarmar

+5

मुझे डर है कि बाद वाला आदेश कभी भी स्मृति आवंटित नहीं कर रहा है। ऐसे मामले में, जीएचसी थ्रेड शेड्यूलर (आईआईआरसी) अनुचित है, और कभी भी अन्य धागे पर नियंत्रण स्थानांतरित नहीं करेगा, या एएसआईएनसी अपवाद को Ctrl-C से वितरित करने की अनुमति देगा। (ईमानदार होने के लिए, यह बहुत समय पहले मामला था, और मुझे नहीं पता कि उन्होंने इस तरह के आसपास काम किया है।) – chi

+0

मुझे पता है कि आप जिस समस्या के बारे में बात कर रहे हैं, लेकिन कम से कम मेरे लिए (जीएचसी- 7.10), Ctrl + C _does_ बाधित 'आखिरी (दोहराएं 0)'! –

उत्तर

9

(चेतावनी पाठभेद:।। मैं urxvt या GNOME टर्मिनल पर लिनक्स, और रन zsh का उपयोग आप एक अलग ऑपरेटिंग सिस्टम, टर्मिनल, या शेल का उपयोग करते हैं, यह यह आपके लिए अलग तरह से काम भी कर सकती है)

जिस तरह से मैं आमतौर पर इसे संभालता हूं उसे Ctrl + Z दबाता है (जो इसे पृष्ठभूमि में रखता है, निष्पादन को पूरी तरह से दुष्प्रभाव के रूप में रोकता है) फिर नौकरी को मारता है। आमतौर पर यह kill %1 है, हालांकि आप jobs को दोबारा जांचने के लिए चला सकते हैं।

तुम भी एक नया टर्मिनल शुरू कर सकते हैं और killall -9 ghci की तरह कुछ करते हैं, लेकिन यह एक बहुत अधिक संसाधन लागत है: आप कुछ नई प्रक्रियाओं को उत्पन्न करने कर रहे हैं, एक्स कनेक्शन खोलने, कर जो कुछ भी यह अपने टर्मिनल जब वह खुद को आरंभ करता है, ऐसा करने पर जो भी हो, वह आपके खोल को शुरू करता है, आदि। यदि आप स्थिति में हैं तो मैं अक्सर खुद को पाता हूं - ghci पागल की तरह स्वैपिंग कर रहा है - जो चीजों को पेंच करने के लिए और अधिक समय देता है।

0

Ctrl+Z खोल छोड़ने लगता है, लेकिन यह पूरी तरह से प्रक्रिया को बंद नहीं करता है।

उदाहरण

लिए
$ ghci 
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help 
Prelude> 
[4]+ Stopped     ghci 
$ ps 
    PID TTY   TIME CMD 
3160 pts/1 00:00:00 bash 
3554 pts/1 00:00:21 emacs 
5602 pts/1 00:00:00 ghc 
5693 pts/1 00:00:00 ps 

लेकिन यदि आप Ctrl+D

$ ghci 
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help 
Prelude> 
Leaving GHCi. 
$ ps 
    PID TTY   TIME CMD 
3160 pts/1 00:00:00 bash 
3554 pts/1 00:00:21 emacs 
5870 pts/1 00:00:00 ps 

करना तो उचित तरीके haskell-shell बंद करने के लिए Ctrl+D हिट करने के लिए है।

नोट: लिनक्स पर परीक्षण किया गया (उबंटू 16.04 LTS)

+0

Ctrl + D कोड को निष्पादित करते समय ghci बंद नहीं करेगा। दूसरी ओर, Ctrl + Z, एक सिग्नल भेजता है जिसे प्राप्त करने की प्रक्रिया द्वारा पकड़ा या संभाला नहीं जा सकता है, इसलिए हमेशा काम करेगा (किसी भी प्रक्रिया के लिए, न केवल ghci)। आप Ctrl + Z द्वारा छोड़े गए बचे हुए प्रक्रिया के बाद 'मार' या इसी तरह के बचे हुए प्रक्रिया के बाद साफ कर सकते हैं, जैसा कि मेरे उत्तर में चर्चा की गई है। –

संबंधित मुद्दे