लिनक्स: कमांड लाइन वाला प्रोग्राम बंद करें (इसे मारें नहीं)


21

कुछ एप्लिकेशन केवल एक रनिंग इंस्टेंस की अनुमति देते हैं (जैसे ग्रहण, यदि आप समान कार्यक्षेत्र का उपयोग करना चाहते हैं)। इसलिए यदि मैं किसी अन्य स्थान से लॉग इन करता हूं, तो मुझे उस एप्लिकेशन को मारना / बंद करना होगा जो पहले किसी अन्य स्थान से लॉग इन होने पर खुला था।

मैं हमेशा रनिंग प्रक्रिया को मारने के लिए किल कमांड का उपयोग करता हूं। लेकिन, यदि आप एक प्रक्रिया को मार देते हैं, तो यह कुछ राज्यों को नहीं बचा सकता है जो भविष्य के उपयोग के लिए उपयोगी हैं। हालांकि, यदि आप करीब बटन पर क्लिक करके इसे ठीक से "बंद" करते हैं, उदाहरण के लिए, यह राज्यों को ठीक से बचाएगा।

क्या कमांड लाइन से किसी एप्लिकेशन को ठीक से "बंद" करने का कोई तरीका है? मुझे पता है कि यह अनुप्रयोगों से भिन्न हो सकता है, इसलिए चलो थोड़ा और अधिक सामान्य हो: किसी अन्य चल रहे एप्लिकेशन को सिग्नल कैसे भेजें, और यह सिग्नल ठीक वैसे ही काम करता है जैसे कि हम शीर्ष बार में "क्लोज़" बटन पर क्लिक करते हैं?


2
क्या हमें यह मान लेना चाहिए कि डेस्कटॉप को वीएनसी के साथ दूरस्थ रूप से एक्सेस करना और फिर ग्राफिकल क्लोज करना बहुत अधिक ओवरहेड है।
ब्रायन स्विफ्ट

जवाबों:


33

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

आप यह सुनिश्चित कर सकते हैं कि आप SIGTERMकमांड लाइन पर इसे स्पष्ट करके कुछ अन्य सिग्नल के बजाय भेज रहे हैं :

kill -s TERM <pid>

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

2
फ़ायरफ़ॉक्स (टूटा हुआ) लगता है। यदि मैं दौड़ता हूं kill -s TERM <firefox-pid>, तो यह इनायत से बंद नहीं होगा, और जब मैं इसे फिर से शुरू करूंगा, तो यह मुझसे पूछता है कि क्या मैं दुर्घटनाग्रस्त सत्र को पुनर्प्राप्त करना चाहता हूं। : आह:
विल्सन एफ

6

ध्यान दें कि TERM के सिंटैक्स को निर्दिष्ट करने के pkillबजाय उपयोग करते समय kill:

pkill -TERM <process-name>

pkill सिर्फ मारने की तरह है, लेकिन आप आईडी के बजाय प्रक्रिया नाम का उपयोग कर सकते हैं। man pkill

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