लिनक्सवरील हॅलोविनः झोम्बी प्रक्रियेस कसे मारावे

हॅलोविन स्टॅम्प

मृतांचा दिवस येत आहे आणि म्हणूनच एलएक्सए कडून त्याबद्दल बोलण्यासाठी हे छोटेखानी ट्यूटोरियल करायचे आहे स्वतंत्रपणे निर्णय घेण्याची कुवत नसलेला असा मनुष्य प्रक्रिया आणि आम्ही त्यांना कसे मारू शकतो. सांगण्याची पहिली गोष्ट म्हणजे स्वतंत्रपणे निर्णय घेण्याची कुवत नसलेला असा मनुष्य प्रक्रिया म्हणजे काय, आणि ती म्हणजे तुम्हाला माहिती आहे, लिनक्स कर्नलकडे प्रक्रिया व्यवस्थापित करण्यासाठी सबसिस्टम आहे आणि वेळापत्रक तयार करण्यासाठी, प्राधान्यक्रमात बदल करण्यासाठी, सीपीयू प्रक्रिया प्रवाह पाठविणे किंवा काढून टाकण्यासाठी कार्य करते. प्रक्रिया नष्ट करा. ठीक आहे, उर्वरित युनिक्स-सारख्या प्रणालींप्रमाणेच कर्नलचा हा भाग विविध प्रक्रियेच्या अवस्थेत फरक करतो ...

तर आपण ते शोधू शकतो एक प्रक्रिया हे झोपेच्या (एस) स्थितीत असू शकते, म्हणजेच झोपी गेले आहे. तसेच चालू असलेल्या (आर) प्रक्रिया ज्या सध्या चालू असतात किंवा चालू असतात त्या प्रक्रिये, (डी) थांबलेल्या प्रक्रियेस उपस्थित राहण्याची प्रतीक्षा केली जाते, जेस्टेप (टी) किंवा निलंबित आणि झोम्बीज (झेड) किंवा मृत. एक झोम्बी किंवा मृत प्रक्रिया ही एक आधीपासून यशस्वीरित्या संपुष्टात आली आहे, परंतु काही सिस्टम संसाधने अपहृत केली गेली आहेत कारण लिनक्स अद्याप प्रक्रियेच्या टेबलमध्ये ती जतन करीत आहे. आपणास आधीच माहित आहे की जेव्हा एखादी प्रक्रिया समाप्त होते, ती या राज्यात राहू नये, परंतु पूर्ण होते आणि कर्नल संसाधनास मुक्त करते जेणेकरुन इतर प्रक्रिया त्यांचा वापर करू शकतील, मुळात ते व्यापलेल्या रॅमला मुक्त करते ...

बरं, या प्रकारच्या झोम्बी प्रक्रिया करणे स्वारस्यपूर्ण नसले तरी, जरी ते वारंवार नसतात तरी आम्ही त्यांचा संकेत म्हणून येथे शोधून काढू शकतो. पहिली गोष्ट म्हणजे आपल्या डिस्ट्रोमध्ये झोम्बी प्रक्रिया आहेत की नाही हे शोधणे आणि त्यासाठी आम्ही स्वतःस मदत करू शकतो शीर्ष किंवा पीएस सारखी साधने. उदाहरणार्थ, या दोन पर्यायांपैकी एक:

ps -el | grep 'Z'

ps aux | grep defunct

आणि एकदा आढळल्यास, आम्ही हे करू शकतो त्याला मार थेट यासह:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

तरीही दुसरा पर्याय म्हणजे पालक प्रक्रिया शोधणे होय एक स्वतंत्रपणे निर्णय घेण्याची कुवत नसलेला असा मनुष्य प्रक्रिया नष्ट आपण वजा केल्याप्रमाणे, आपल्याला ती टिकवून ठेवणार्‍या पालक प्रक्रियेस मारणे आवश्यक आहे:

ps -eo pid,ppid | grep <PID>

kill -9 <PPID>

आपल्याला पुनर्स्थित करावे लागेल आपल्याला सापडलेल्या झोम्बी प्रक्रियेच्या आयडीद्वारे आणि त्यास मारुन टाकून, त्याऐवजी पुनर्स्थापनेच्या मूळ प्रक्रियेचा आयडी वापरा उदाहरणार्थ, स्पष्टपणे.


आपली टिप्पणी द्या

आपला ई-मेल पत्ता प्रकाशित केला जाणार नाही. आवश्यक फील्ड चिन्हांकित केले आहेत *

*

*

  1. डेटासाठी जबाबदार: AB इंटरनेट नेटवर्क 2008 SL
  2. डेटाचा उद्देशः नियंत्रण स्पॅम, टिप्पणी व्यवस्थापन.
  3. कायदे: आपली संमती
  4. डेटा संप्रेषण: कायदेशीर बंधन वगळता डेटा तृतीय पक्षास कळविला जाणार नाही.
  5. डेटा संग्रहण: ओकेन्टस नेटवर्क (EU) द्वारा होस्ट केलेला डेटाबेस
  6. अधिकारः कोणत्याही वेळी आपण आपली माहिती मर्यादित, पुनर्प्राप्त आणि हटवू शकता.

  1.   गोळे केले म्हणाले

    चांगली साइट!
    ते नेहमीच आपल्याला संकटातून बाहेर काढतात.

    कोठे म्हणते:
    जरी दुसरा पर्याय म्हणजे पालक प्रक्रिया शोधणे, कारण झोम्बी प्रक्रिया नष्ट करण्यासाठी तुम्हाला त्यास समर्थन देणार्‍या पालक प्रक्रिया नष्ट कराव्या लागतील, जसे तुम्ही अनुमान काढले असेल:

    1 | ps -eo pid, ppid | grep
    2|
    3 | मारणे -9

    तुम्हाला सापडलेल्या झोम्बी प्रक्रियेच्या आयडीसाठी तुम्हाला पर्याय द्यावा लागेल आणि तो किलने मारण्यासाठी, उदाहरणामध्ये बदलणाऱ्या पालक प्रक्रियेचा आयडी वापरा, अर्थातच.

    तुम्ही स्क्रिप्ट जोडू शकता:

    $cat killppid.sh
    #! / बिन / बॅश
    किल -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $2}')

    अर्थात, हे एक सामान्य वापरकर्ता नेहमी करत असलेले कार्य नाही.
    हे केवळ प्रशासकासाठी उपयुक्त असेल, परंतु ते रूट म्हणून चालवणे धोकादायक आहे, कारण सिस्टमवरील कोणतीही प्रक्रिया मारली जाऊ शकते.

    मनुष्याच्या हत्येमध्ये ही नोट आहे:

    नोट्स तुमच्या शेलमध्ये (कमांड लाइन इंटरप्रिटर) अंगभूत किल कमांड असू शकते. आपण कदाचित
    संघर्ष सोडवण्यासाठी येथे / bin / kill म्हणून वर्णन केलेली कमांड चालवावी लागेल.

    बॅशला ती आज्ञा आहे, हा त्याबद्दल मॅन बॅशचा भाग आहे:

    मारणे [-s sigspec | -n signum | -sigspec] [pid | जॉबस्पेक] ...
    kill -l|-L [sigspec | निर्गमन_स्थिती]
    sigspec किंवा signum द्वारे नाव दिलेले सिग्नल pid किंवा job द्वारे नामित प्रक्रियेस पाठवा
    तपशील sigspec हे एकतर केस-संवेदनशील सिग्नल नाव आहे जसे की SIGKILL (सह किंवा
    SIG उपसर्ग शिवाय) किंवा सिग्नल क्रमांक; signum एक सिग्नल क्रमांक आहे. तर
    sigspec उपस्थित नाही, नंतर SIGTERM गृहीत धरले जाते. -l चा युक्तिवाद सूचीबद्ध करतो
    सिग्नल नावे. -l दिल्यावर कोणतेही युक्तिवाद दिले असल्यास, ची नावे
    युक्तिवादांशी संबंधित सिग्नल सूचीबद्ध आहेत आणि परताव्याची स्थिती 0 आहे.
    -l साठी exit_status वितर्क ही एक संख्या आहे जी सिग्नल क्रमांक किंवा निर्दिष्ट करते
    सिग्नलद्वारे समाप्त झालेल्या प्रक्रियेची निर्गमन स्थिती. -L पर्याय समतुल्य आहे
    -l ला दिले. कमीत कमी एक सिग्नल यशस्वीरीत्या पाठवला असल्यास किल रिटर्न्स ट्रू, किंवा
    एखादी त्रुटी आढळल्यास किंवा अवैध पर्याय आढळल्यास असत्य.

    काही समस्या टाळण्यासाठी बॅश प्रक्रियांचे संरक्षण कसे करते हे सुरुवातीला ते स्पष्ट करतात, परंतु रूट म्हणून चालण्यासाठी मी सुरक्षित स्क्रिप्ट कशी बनवू शकेन हे मला स्पष्ट नाही.
    मी फक्त एका गोष्टीचा विचार करू शकतो ते असे संरक्षित करणे आहे:

    $cat killppid.sh
    #! / बिन / बॅश
    जर [$ USER == "रूट"]
    नंतर echo $0 रूट म्हणून चालवू नका !!! ते धोकादायक आहे!
    बाहेर पडा
    fi

    किल -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $2}')

    $

    बॅशचा किल वापरा, नॉट/बिन/किल

    कसं बघू मला बाशात पारंगत नाही.
    मूल प्रक्रियेचा वापरकर्ता म्हणून चालणारी सुरक्षित स्क्रिप्ट कशी लिहायची हे तुम्हाला माहीत आहे, जरी ती रूट म्हणून चालली तरी?
    यासारखे मॅन्युअली काय केले जाईल याच्या समतुल्य काहीतरी:

    $ su;
    $ kill -9 $ (ps -eo pid, ppid | awk '$ 1 ==' $ {1} '{print $2}')