टर्मिनल में अभी भी चल रही प्रक्रियाओं को कैसे ढूंढें?


13

जब मैं गनोम टर्मिनल में एक टैब को बंद करने की कोशिश करता हूं, तो यह कहता है:

इस टर्मिनल को बंद करें? इस टर्मिनल में अभी भी एक प्रक्रिया चल रही है। टर्मिनल बंद करने से यह मार जाएगा।

मैं कैसे पता लगा सकता हूं कि अभी भी क्या चल रहा है? ध्यान दें कि आउटपुट में कुछ भी नहीं है jobs। धन्यवाद।


1
यदि यह संदेश दिखाए जाने के दौरान आप शेल प्रॉम्प्ट पर हैं, तो शायद यह एक नेस्टेड शेल है (टर्मिनल एमुलेटर द्वारा सीधे शुरू नहीं किया गया)। हो सकता है कि आप एक शुरू कर दिया है screen, tmux, script, ssh, mcऔर पैनल बंद कर दिया है, या बस एक और उदाहरण के लिए टाइपिंग से खोल bash, या इन पंक्तियों के साथ कुछ। Ctrl + D दबाएं या exitअपना शेल छोड़ने के लिए टाइप करें, आप देखेंगे कि आप कहां समाप्त होते हैं।
इग्मोंट

धन्यवाद। के बाद exit, सूक्ति टर्मिनल टैब बंद नहीं करता है।
टिम

1
एक दूसरा exitशायद तब इसे बंद कर देगा। @egmont क्या आप इसे उत्तर में स्थानांतरित कर सकते हैं।
वीडियोनौथ

जवाबों:


13
ps T

टर्मिनल से जुड़ी सभी प्रक्रियाओं का चयन करता है।


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

या बस उस मामले के लिए ps
user10089632

2

आप अपने शेल के PID को माता-पिता के रूप में सूचीबद्ध करने वाली प्रक्रियाओं में एक शिखर ले सकते हैं। जैसा कि आप जानते हैं या नहीं जानते हैं, हम psप्रारूप निर्दिष्ट कर सकते हैं

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

यहां, हमें विशेष चर $$में शेल का पीआईडी ​​मिलता है SHELLPID, जिसे तब पाइप के उपखंड में awk द्वारा उपयोग किया जा सकता है। अनिवार्य रूप से हम केवल NAME, PID, पेरेंट PID के रूप में प्रक्रियाओं को सूचीबद्ध कर रहे हैं, और केवल उन लोगों को फ़िल्टर करते हैं जिनके पास अंतिम कॉलम में उपयुक्त PID है।


2

यदि आपने टर्मिनल में कुछ प्रक्रिया शुरू कर दी है (उदाहरण के लिए gedit) प्रोसेस आईडी (PID) (बैश की) और पेरेंट प्रोसेस आईडी (PPID) (gedit की) की तुलना में तो यह दो प्रक्रियाएँ समान होंगी। के आउटपुट में इसे देखा जा सकता है

ps -ef

आदेश। इसे और अधिक पठनीय बनाने के लिए पहले "पाइप" आउटपुट को grepवर्तमान में चल रही सभी "बैश" प्रक्रियाओं के पीआईडी ​​को खोजने के लिए और फिर से इसे "पाइप" की तुलना में बनाने की अनुमति देता है awkawkकेवल PID और प्रक्रिया नाम फ़ील्ड (फ़ील्ड 2 और 8) का चयन करता है और इसे स्क्रीन पर आउटपुट करता है।

ps -ef | grep bash | awk '{print $2 ": " $8}'

आउटपुट में संख्या पीआईडी ​​है। आप इसका उपयोग यह जानने के लिए करेंगे कि उस पीआईडी ​​में टर्मिनल में क्या प्रक्रिया शुरू की गई थी। ध्यान दें कि यदि आपके पास एक से अधिक टर्मिनल हैं, तो आउटपुट की एक से अधिक लाइन हो सकती हैं। अब उस टर्मिनल सत्र के "बच्चे" प्रक्रियाओं (यदि कोई हो) को खोजने के लिए हम इस कमांड का उपयोग कर सकते हैं:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

आपको अंतिम कमांड में EnterPID के स्थान पर PID नंबर दर्ज करना होगा। यदि "बैश" के लिए एक से अधिक पीआईडी ​​है, तो आपको उन सभी की कोशिश करनी चाहिए।

अंतिम कमांड केवल ps -efपीआईडी का उत्पादन करता है और खोजता है (यदि आपने पिछली कमांड से पाया है) और पीपीआईडी ​​किसी भी प्रक्रिया के लिए समान हैं।

और जानकारी:

आदमी पी एस

आदमी जाग गया


-1

आप उपयोग कर सकते हैं htop। Ubuntu 16.04 (और उच्चतर) में, आप इसे केवल टाइप करके स्थापित कर सकते हैं sudo apt-get install htop

आप भी इस्तेमाल कर सकते हैं top


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