शीर्ष / htop में प्रक्रियाओं के एक पेड़ को मारना


12

htop मुझे खोल के भीतर प्रक्रियाओं के पेड़ों को अच्छी तरह से देखने की अनुमति देता है। मैं दबाकर प्रक्रियाओं को मार सकता हूं F9 (KILL)और फिर किस सिग्नल (जैसे 15 SIGTERM) को चुनकर मैं मारने के लिए नौकरी भेजना चाहता हूं।

हालांकि, यह केवल मुझे एक बार में एक प्रक्रिया को मारने की अनुमति देता है। क्या प्रक्रियाओं का पूरा पेड़ मारने का कोई तरीका है htop?

जवाबों:


16

से man htop:

इंटरएक्टिव कॉमांड

स्पेस टैग या एक प्रक्रिया को अनटैग करें। कमांड जो कई प्रक्रियाओं पर काम कर सकते हैं, जैसे "किल", फिर टैग की गई प्रक्रियाओं की सूची पर लागू होगा , बजाय वर्तमान में हाइलाइट किए हुए।

यू अनटैग सभी प्रोसेस (स्पेस की के साथ जोड़े गए सभी टैग हटा दें)।

F9, k "किल" प्रक्रिया: एक संकेत भेजती है जिसे एक मेनू में, एक या प्रक्रियाओं के समूह में चुना जाता है। यदि प्रक्रियाओं को टैग किया गया था, तो सभी टैग की गई प्रक्रियाओं को संकेत भेजता है। यदि कोई भी टैग नहीं किया गया है, तो वर्तमान में चयनित प्रक्रिया को भेजता है।

काफी जवाब नहीं जो आप ढूंढ रहे थे, लेकिन करीब। आप किल के साथ प्रक्रिया समूह या बच्चों को भी समाप्त कर सकते हैं, देखें:

/programming/392022/best-way-to-kill-all-child-processes


1

हाइप मैनपेज से:

F5, t ट्री व्यू: पेरेंटहुड द्वारा प्रक्रियाओं को व्यवस्थित करें, और एक पेड़ के रूप में उनके बीच संबंधों को लेआउट करें। कुंजी को टॉगल करना पेड़ और आपके पहले चयनित सॉर्ट दृश्य के बीच बदल जाएगा। सॉर्ट दृश्य का चयन ट्री व्यू से बाहर निकल जाएगा।

इसलिए F5 को हिट करें, और आपको 't' को हिट करना पड़ सकता है। यह आपको पूरे पेड़ को मारने देगा।


1
यह तभी काम करेगा जब "पेड़" अनिवार्य रूप से अपने माता-पिता के लिए बाध्य हो; ध्यान दें कि htop थ्रेड समूहों को पेड़ों के रूप में दिखाता है (जिस स्थिति में, शाखाएं वास्तविक प्रक्रिया नहीं हैं)। अन्यथा, अनाथ बच्चों को फिर से पैरेंट द्वारा परेड किया जाएगा, इसलिए उन्हें नहीं मारा गया।
गोल्डीलॉक्स

मैं पूरी तरह से सहमत हूं, हालांकि यह शामिल प्रक्रियाओं पर सख्ती से निर्भर करता है। उदाहरण के लिए, एक ssh ट्री सत्र को मारना अंतर्निहित बच्चों को मार डालेगा; ओपी विशेष रूप से विशिष्ट नहीं था कि वह एक पूरे पेड़ को क्यों मारना चाहता था।
Stephan

1

आप का अपहरण कर सकता है htopकी sकमान। में htop, sआह्वान दबाते हुए strace -p <the-pid-of-the-selected-process>

फिर आप क्या कर सकते हैं एक straceकमांड बनाएं जिसमें कुछ ऐसा हो:

#! /bin/sh -
pids=$(ps -eo pid= -o ppid= |
  awk -v exclude="$PPID" -v pid="$2" '
    function descends(p) {
      if (p == exclude) return 0
      if (p == pid) return 1
      if (p <= 1) return 0
      return descends(parent[p])
    }
    { parent[$1]=$2 }
    END {
      for (p in parent)
        if (descends(p))
         print p
    }'
)
if [ -z "$pids" ]; then
  echo >&2 "No process found to kill"
else
  echo >&2 Killing $pids
  kill $pids
fi

और इसे कुछ डायरेक्टरी में रखें ~/.htop-hijack, और जैसे htop को कॉल करें:

PATH=~/.htop-hijack:$PATH htop

फिर, दबाने से sउस आदेश को लागू किया जाएगा strace(आपको बाद में मुख्य स्क्रीन पर वापस जाने के लिए Esc को दबाने की आवश्यकता है)।


1

लंबे समय से इसके लिए एक विशेषता है, लेकिन यह 2018 तक मैनुअल से गायब था: cवर्तमान में हाइलाइट की गई प्रक्रिया के साथ-साथ उसके सभी बच्चों का चयन करने के लिए कुंजी दबाएं । फिर संचालन जो चयनित प्रक्रियाओं पर लागू होता है (जैसे kकुंजी का उपयोग करके हत्या ) प्रक्रिया और उसके बच्चों पर लागू होता है।

यह परमाणु नहीं है, यद्यपि। यदि नए बच्चे आपके द्वारा दबाए जाने वाले पल के बीच पैदा होते हैं cऔर जिस क्षण कर्नेल ने सभी प्रक्रियाओं को मार दिया है, वे मारे नहीं जाएंगे और सबसे अधिक संभावना है कि यह init प्रक्रिया को फिर से शुरू किया जाएगा। ऐसा इसलिए है क्योंकि htop चयनित प्रक्रियाओं पर लूपिंग है और उन्हें एक-एक करके मार रहा है।

मैंने एक परमाणु समूह-हत्या की सुविधा को जोड़ने के लिए एक पैच का प्रस्ताव कुछ समय पहले किया है, लेकिन इसे विलय के लिए कार्यान्वयन पर्याप्त नहीं था। इसके साथ, एक पूरे प्रक्रिया समूह को एटमेटिक रूप से htop से मारना संभव है। यह पूरी तरह से एक पूरे पेड़ को मारने के समान नहीं है, लेकिन AFAIK, कर्नेल को मनमाने ढंग से पेड़ को मारने का कोई तरीका प्रदान नहीं करता है।

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