क्या किसी एप्लिकेशन को ठीक से बाहर किए बिना टर्मिनल विंडो को बंद करना हानिकारक है?


18

उबंटू 12.04 एलटीएस का उपयोग करते हुए, मेरा सवाल यह है कि अगर मैंने एक टर्मिनल विंडो में एक एप्लिकेशन शुरू किया है, तो क्या एप्लिकेशन को ठीक से बाहर निकाले बिना टर्मिनल विंडो को बंद करने के बारे में कुछ भी बुरा है। उदाहरण के लिए, मैं MATLAB का उपयोग करता हूं। मैं एक टर्मिनल खोलता हूं और टाइप करता हूं

matlab -nodisplay -nodesktop -nosplash

और फिर स्क्रिप्ट का एक गुच्छा चलाएं। फिर मैं भी कर सकता हूं

exit

MATLAB को समाप्त करने के लिए और फिर टर्मिनल विंडो बंद करें या टर्मिनल विंडो को बंद करें। वास्तव में इन दोनों विधियों में क्या अंतर है? क्या दूसरी विधि किसी भी तरह से "नुकसान" करती है? पहली विधि पसंद है? क्यों?

जवाबों:


22

सामान्य तौर पर यह इस तरह से करना ठीक होना चाहिए।

जब आप टर्मिनल विंडो को बंद करने के लिए "X" पर क्लिक करते हैं, जो आपके डेस्कटॉप (GNOME, KDE, आदि) से टर्मिनल एप्लिकेशन को "सिग्नल" भेज रहा है, तो इसे स्वयं बंद करने के लिए कह रहा है। चूंकि आप इस शेल में MATLAB चला रहे हैं इसलिए इसे टर्मिनल एप्लिकेशन के लिए एक चाइल्ड प्रोसेस माना जाता है।

तो माता-पिता की प्रक्रिया होने की ज़िम्मेदारियों का एक हिस्सा यह है कि आप बदले में अपने बच्चों के लिए यह वही "संकेत" भेजें।

अब यदि आप वैचारिक रूप से समझते हैं कि मैंने अभी क्या समझाया है तो चलिए वास्तविक शब्दावली में थोड़ा और स्थान लेते हैं।

संकेत

पहले "सिग्नल" के साथ, वास्तव में विभिन्न संकेतों का एक पूरा परिवार है जो आप यूनिक्स प्रक्रियाओं को भेज सकते हैं। यह सरल रखने के लिए देखते हैं 4 है कि आप अक्सर देखेंगे, SIGHUP, SIGTERM, SIGINT, और SIGKILL

  • उच्छ्वास करो

    जब उसके नियंत्रण टर्मिनल को बंद कर दिया जाता है, तो उसे सिग्नल सिग्नल एक प्रक्रिया में भेजा जाता है। यह मूल रूप से एक सीरियल लाइन ड्रॉप की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, इस संकेत का आमतौर पर मतलब है कि छद्म या आभासी टर्मिनल को नियंत्रित करना बंद कर दिया गया है।

  • SIGTERM

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

  • SIGINT

    जब उपयोगकर्ता INTR वर्ण (सामान्य रूप से Cc) टाइप करता है, तो संकेत ("प्रोग्राम इंटरप्ट") संकेत भेजा जाता है।

  • SIGKILL

    SIGKILL सिग्नल का उपयोग तत्काल प्रोग्राम समाप्ति के लिए किया जाता है। इसे संभाला या अनदेखा नहीं किया जा सकता है, और इसलिए यह हमेशा घातक होता है। इस सिग्नल को ब्लॉक करना भी संभव नहीं है।

नोट: SIGINT जब आप का उपयोग क्या भेजा जाता है Ctrl+ C, जबकि यह चल रहा है के बीच में है कमांड लाइन से "तोड़" एक कार्यक्रम के लिए।

कौन सा उपयोग हो रहा है?

सबसे अधिक संभावना यह SIGTERMहै कि आपके विंडो वातावरण द्वारा कॉल किया जा रहा है और आपके टर्मिनल तक नीचे जा रहा है। आपका टर्मिनल तब सबसे अधिक संभावना है, फिर SIGHUPMATLAB को भेज रहा है। यह संकेत सभी प्रक्रियाओं को किसी भी स्थानीय सफाई (समापन फ़ाइलें, प्रक्रियाओं को समाप्त करने, आदि) को स्वयं करने का अवसर देता है।

मार कमान

तुम्हें पता है, संकेत अपने आप को खराब नामित आदेश का उपयोग कर भेज सकते हैं kill। तो SIGTERMअपने टर्मिनल या SIGHUP to MATLAB, you could determine their PID usingps` को सिग्नल भेजने के लिए और फिर उन्हें सिग्नल भेजने के लिए यह कमांड चलाएँ:

$ kill -SIGTERM <PID>

या यह:

$ kill -SIGHUP <PID>

आप इस कमांड का उपयोग करके संकेतों की पूरी सूची प्राप्त कर सकते हैं:

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...

ध्यान दें कि सिग्नल में नंबर हैं? आप अक्सर उन्हें अपने नामों के बजाय इस तरह से इस्तेमाल करते हुए देखेंगे:

$ kill -15 <PID>

या बदनाम -9, जो किसी भी प्रक्रिया को बहुत मार सकता है।


मैंने हमेशा सोचा कि वे संख्याएँ नकारात्मक थीं, लेकिन वे वास्तव में कमांड-लाइन तर्क हैं। मैंने कुछ नया सीखा: D
थॉमस

1
HUP - HangUP - एक टर्मिनल के लिए "लाइन को ढीला" करने पर भेजा जाने वाला संकेत है, जैसे कि आप मॉडेम द्वारा यूनिक्स-सर्वर से जुड़े थे। यह शायद सबसे "कोमल" संकेत है जो एक प्रक्रिया को समाप्त करता है। अधिकांश डेमॉन बाहर नहीं निकलेंगे, लेकिन एचयूपी पर उनके विन्यास-फाइल को फिर से पढ़ेंगे। शेल को बंद करने के बाद कमांड नोह आपको पृष्ठभूमि-प्रक्रिया जारी रखने की अनुमति देता है। स्क्रीन जैसे कमांड हैंगअप से बचे रहते हैं और HUP से इसमें कमांड को इंसुलेट करते हैं।
बार्ड कोपरपुड

@BaardKopperud - धन्यवाद, मैंने जानबूझकर HUP को छोड़ दिया, चर्चा को भ्रमित नहीं करना चाहता था।
स्लम

@BaardKopperud - मुझे लगता है कि आप जो इंगित कर रहे हैं वह यह है: "SIGHUP सिग्नल को एक प्रक्रिया में भेजा जाता है जब इसका नियंत्रण टर्मिनल बंद हो जाता है। यह मूल रूप से एक सीरियल लाइन ड्रॉप की प्रक्रिया को सूचित करने के लिए डिज़ाइन किया गया था। आधुनिक प्रणालियों में, यह संकेत है। आमतौर पर इसका मतलब है कि छद्म या आभासी टर्मिनल को बंद करना बंद कर दिया गया है "मैं मानता हूं कि मैंने अपने विवरण में थोड़ा झूठ बोला था लेकिन इसे सरल रखने की कोशिश कर रहा था।
स्लम

@BaardKopperud - मैंने दोषी महसूस किया इसलिए मैंने अपने उत्तर को और सटीक रूप से प्रतिबिंबित करने के लिए संशोधित किया कि क्या चल रहा है। धन्यवाद!
स्लम

2

यह सबसे अधिक संभावना है, लेकिन आपके द्वारा खोले गए अनुप्रयोगों के आधार पर आप डेटा खो देंगे। उदाहरण के लिए, यदि आपके पास एक फ़ाइल संपादक खुला है, तो आप अपने कुछ परिवर्तनों को खो सकते हैं यदि आप सहेजते नहीं हैं और ठीक से बाहर निकलते हैं। यदि आप चिंतित हैं, तो ठीक से टर्मिनल से लॉगआउट / बाहर निकलें। अगर आपको टाइपिंग पसंद नहीं है exitया logoutसिर्फ कोशिश करें Ctrl-D


क्यों बेहतर होगा? आवेदन SIGTERM के बजाय SIGHUP होने वाली है, लेकिन यह अभी भी एक संकेत के हाथों मारे गए रही है तो मैं वास्तव में यह फोन नहीं होगा "ठीक से बचाने के लिए और बाहर निकलने के"
माइकल Mrozek

जहाँ तक Ctrl-D, यह वास्तव में केवल कमांड प्रॉम्प्ट पर लागू होता है।
मार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.