कैसे सुरक्षित रूप से गर्भपात करने के लिए स्थापित हो?


44

मेरे पास एक ऐसी apt-get installप्रक्रिया है जो processing triggers for python-supportकदम पर निराशाजनक रूप से कम हो रही है ।

मेरा झुकाव इसके लिए killहै, लेकिन अतीत में, बस killएक apt-get installप्रक्रिया ने मुझे बहुत दु: ख दिया है। (IIRC मिश्रित लॉक फ़ाइलों को पीछे छोड़ दिया जाता है, आदि)

क्या इस प्रक्रिया को रोकने का कोई सुरक्षित तरीका है?

जवाबों:


44

हत्या की प्रक्रिया

आम तौर पर एक प्रक्रिया को मारने के लिए बोलना, नियमित रूप से मारने (SIGTERM) की तुलना में एक प्रक्रिया को मारने का कोई सुरक्षित तरीका नहीं है। यदि यह एक संवादात्मक प्रक्रिया है, तो यह आमतौर पर आपको SIGINT सिग्नल भेजकर इसे सुरक्षित रूप से रोकने की अनुमति देता है, आमतौर पर Ctrl+ दबाकर भेजा जाता है C। इस संकेत को प्रक्रिया द्वारा फँसाया जा रहा है जो स्वयं इसे सुन सकता है - और आमतौर पर इनायत से रुकता है। ( धन्यवाद एलियाह )

DPKG डेटाबेस

पैकेज प्रबंधन के संबंध में एक विशेष मामला है। DPTG डेटाबेस जो APT कमांड पानी के नीचे उपयोग करता है, वह हमेशा यह पता लगा सकता है कि कोई ऑपरेशन समाप्त नहीं हुआ है। प्रत्येक पैकेज में एक वास्तविक स्थिति होती है जो वर्तमान स्थिति के साथ-साथ वर्तमान स्थिति, जैसे कि अनपैक्ड, कॉन्फ़िगर, इत्यादि में चिह्नित होती है । APT फ्रंटेंड को मारकर, डेटाबेस एक टूटे हुए, लेकिन ज्ञात स्थिति में होगा। लॉक फ़ाइलों को केवल एक बार जारी किया जाएगा जब यह एक साफ स्थिति में वापस आ जाएगा - आपको यह तय करना चाहिए जब तक कि यह नए संचालन की अनुमति न दे।

ठीक करने का तरीका कॉन्फ़िगर स्थिति में सभी पैकेज प्राप्त करने के लिए एक प्रक्रिया है। व्यावहारिक रूप से, यदि आपने किसी apt-getऑपरेशन को बाधित किया है, तो आप इसे बाद में उपयोग करके समाप्त कर सकते हैं

sudo dpkg --configure -a

यह जानता है कि कैसे टूटी हुई स्थिति से एक सभी-कॉन्फ़िगर राज्य में पुनर्प्राप्त करना है और इस अर्थ में बस वहीं से जारी है जहां इसे बाधित किया गया था। जब तक कि आप समाप्त नहीं हो जाते, तब तक लॉक फाइलें वहीं रह जाती हैं और यह एक कारण से है - अशुद्ध अवस्था में DPKG डेटाबेस के साथ नए संचालन को रोकने के लिए।

SIGKILL (9) के बारे में

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


2
जब कोई एप्लिकेशन इसे समाप्त करने का एक तरीका प्रदान करता है, तो यह आमतौर पर SIGTERM की तुलना में अधिक सुरक्षित होता है। उदाहरण के लिए, अधिकांश (यदि सभी नहीं) टेक्स्ट एडिटर, वर्ड प्रोसेसर, ग्राफिक्स प्रोग्राम, वेब ब्राउजर और अन्य टेक्स्ट-आधारित या ग्राफिकल एप्स जहां उपयोगकर्ता को ऐसी सामग्री बनाने की संभावना है जिसे खोना नहीं चाहिए, तो इसे ऑटो-सेव न करें छोड़ने से पहले जब वे SIGTERM प्राप्त करते हैं। इसके अलावा, कृपया ध्यान दें कि SIGINT कभी-कभी SIGTERM से अधिक सुरक्षित हो सकता है (लेकिन आम तौर पर तब तक नहीं भेजा जाना चाहिए जब तक कि Ctrl + C के रूप में एक ही परिणाम स्पष्ट रूप से वांछित न हो)।
एलिया कागन

16

जब मैं असफलता के साथ असफलता का सामना करता हूं, तो मैं निम्नलिखित कार्य करता हूं (मूल के रूप में, यानी sudoसभी आदेशों से पहले):

  1. Apt-get नाम की प्रक्रिया को मार डालो:

    Killall -9 उपयुक्त-मिलता है
  2. पुन: कॉन्फ़िगर करें dpkg:

    dpkg --configure -a
  3. अद्यतन प्राप्त करें:

    apt-get update
  4. उन पैकेजों को अपडेट करें, जिनमें अनुचित रूप से इंस्टॉल किया गया है:

    उपयुक्त-अपग्रेड प्राप्त करें

यह मैंने कहीं से सीखा है, लेकिन दुर्भाग्य से मुझे ठीक से याद नहीं है।


6
जब तक आपके पास ऐसा करने का एक बहुत अच्छा कारण न हो, कृपया कभी भी संकेत 9 (SIGKILL) न भेजें। देखिये मेरा अपडेटेड जवाब।
gertvdijk

3
sudo dpkg -r <package name>

मेरे मामले में मुझे Ubuntu 8.04 पर जावा 8 की समस्या थी, इसलिए ...

sudo dpkg -r oracle-java8-installer

1

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

हमेशा एप्लिकेशन को सामान्य तरीके से समाप्त करने का प्रयास करें और केवल उन प्रक्रियाओं को मारें जो अनुप्रयोगों को दूर भगाते हैं।


0

यह है कि मैं इसे कैसे करता हूं, Ctrl+ Cलेकिन आप पर ध्यान दें कि यह तब तक सुरक्षित है जब तक apt-get डाउनलोडिंग चरण में है या इसके कैश को अपडेट कर रहा है। इसके अलावा मैं ऐसा तरीका नहीं सोच सकता जो सुरक्षित हो। बस इसे किसी भी तरह से अनइंस्टॉल या डाउनग्रेड करके समाप्त और पूर्ववत करें। डाउनलोड की गई फ़ाइलों के साथ साफ किया जा सकता हैsudo apt-get autoclean

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