रनिंग टर्मिनल प्रोग्राम की प्रोसेस आईडी (पीआईडी) कैसे खोजें?


116

मैं टर्मिनल में एक प्रोग्राम चला रहा हूं, जिसमें मैं बच नहीं सकता Ctrl- Cऔर जिसे मैं मारना चाहता हूं। मैं इसका पीआईडी ​​कैसे खोज सकता हूं?


1
यह उबुन के फ्रीज होने पर मुझे क्या करना चाहिए? उस प्रश्न में विवरण को रोकने के लिए एक संदर्भ के रूप में भी तकनीकी बनने से।
Jeded

एक पिडोफ कमांड है।
neverMind9

जवाबों:


127

एक और टर्मिनल खोलें और चलाएं ps ax | grep fooजहां फू गैर-जिम्मेदार कार्यक्रम का नाम है। इससे आउटपुट की एक पंक्ति वापस आनी चाहिए जो कुछ इस तरह दिखती है:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

आउटपुट की प्रत्येक पंक्ति का पहला क्षेत्र एक संख्या है जो प्रोग्राम की प्रक्रिया आईडी से मेल खाती है grep(आप सुरक्षित रूप से पिछले एक को अनदेखा कर सकते हैं, जो grepस्वयं का प्रतिनिधित्व करता है।

अपमानजनक प्रक्रिया को रोकने के लिए, kill pidजहां : pid प्रोग्राम की प्रोसेस आईडी है। हो सकता है कि आपको अपने निर्णय का उपयोग करना होगा कि किन-किन मैचों को killएड करने की आवश्यकता है , या आप topइसके बजाय उपयोग कर सकते हैं । killस्वयं का उपयोग करके SIGTERM भेजता है, जिसे आपको पहले प्रयास करना चाहिए क्योंकि यह कार्यक्रम को स्वयं के बाद ठीक से साफ करने की अनुमति देता है। यदि SIGTERM विफल हो जाता है, तो SIGHUP का प्रयास करें, जो स्टोंगर दवा है kill -HUP pid:। यदि अन्य सभी विफल रहता है, तो SIGKILL भेजें। लेकिन, आपको केवल अंतिम उपाय के रूप में ऐसा करना चाहिए, क्योंकि SIGKILL कर्नेल को क्लीनअप की संभावना के साथ प्रक्रिया को तुरंत समाप्त करने का कारण बनता है। यह कई बार डेटा भ्रष्टाचार या अन्य समस्याओं के परिणामस्वरूप हो सकता है। तो फिर, केवल अंतिम उपाय के रूप में SIGKILL भेजें। ऐसा करने के लिए, करो kill -KILL pidया kill -9 pid

यदि आप एक ग्राफिकल इंटरफ़ेस चला रहे हैं, तो निश्चित रूप से, आपको काम करने के लिए इस पागल कमांड-लाइन सामान के साथ मूर्ख बनाने की आवश्यकता नहीं है। बस "सिस्टम मॉनिटर" खोलें, प्रोसेस टैब पर जाएं, उस प्रक्रिया को चुनें जिसे आप रोकना चाहते हैं (एचएम, यह 90% सीपीयू का उपयोग करके एक हो सकता है?) और इसे राइट-क्लिक करें। चूंकि प्रक्रिया पहले से ही बंद है, (यह समस्या है, सही?) परिणामी मेनू से अंतिम प्रक्रिया या किल प्रक्रिया चुनें।

कोनाहेड को श्रेय


5
लोगों को कभी भी SIGKILL (किल -9) का उपयोग नहीं करना चाहिए जब तक कि अन्य सभी विधियां विफल न हो जाएं। केवल लिस्टिंग kill -9खराब सलाह है। मैंने इसका उत्तर सही करने के लिए संपादित किया है।
स्कॉट सेवेरेंस

मैं किसी कस्टम फ़ंक्शन का pid कैसे ढूँढ सकता हूं। मेरे पास एक फ़ंक्शन है जिसमें pingकमांड के साथ एक लूप होता है और sleepUnix.stackexchange.com/a/275826/72988 के अनुसार , यह उबंटू में संभव नहीं है multiplexer
तिमो

47

मुझे नहीं लगता कि ऐसे लंबे आदेशों की कोई आवश्यकता है जब आप समान आदेशों को pgrep, pkill, pkof आदि के साथ पूरा कर सकते हैं ...

  • एक रनिंग-प्रोग्राम की पिड पाने के लिए

pgrep:

   pgrep [options] pattern

वर्णन: pgrep वर्तमान में चल रही प्रक्रियाओं के माध्यम से दिखता है और प्रक्रिया ID को सूचीबद्ध करता है जो चयन मानदंडों से मेल खाता है। सभी मानदंडों का मिलान करना होगा। उदाहरण के लिए,

  • रूट के स्वामित्व वाली sshd नाम की प्रक्रिया का पता लगाने के लिए।

    $ pgrep -u root sshd
    
  • रूट या डेमन के स्वामित्व वाली प्रक्रियाओं की सूची बनाएं।

    $ pgrep -u root,daemon
    

pidof:

विवरण :

पिडॉफ नामांकित कार्यक्रमों की प्रक्रिया आईडी (pids) पाता है। यह मानक आउटपुट पर उन आईडी को प्रिंट करता है।

वाक्य रचना: pidof program_name

  • Pidill pkill उदाहरण द्वारा प्रोग्राम को मारने के लिए:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -fझंडा: process_name (मैन pkill देखें)
    -oध्वज खोजता है : केवल सबसे पुरानी मिलान प्रक्रिया का चयन करें।
    -nझंडा: केवल नवीनतम प्रक्रियाओं का चयन करें।
    -lझंडा: प्रक्रिया का नाम और साथ ही प्रक्रिया आईडी को सूचीबद्ध करें।


1
यह सबसे अच्छा उत्तर है
ब्लैकडिविन

20

किसी रनिंग प्रोग्राम की सूचना जानने के लिए सबसे आसान तरीका है:

pidof <application name>

उदाहरण के लिए, यदि आपने विम शुरू किया है और इसके बारे में जानना चाहते हैं:

pidof vim

याद रखें कि आपको सटीक प्रोग्राम नाम प्रदान करना होगा जो शुरू किया गया है।

उदाहरण के लिए, यदि आप vi चला रहे हैं और निष्पादित करें pidof vimतो आपको सही परिणाम नहीं मिलेंगे।

pidofअधिक जानकारी के लिए मैनुअल पेज देखें ।


यह डिफ़ॉल्ट रूप से स्थापित नहीं है। यह sysvinit-utils पैकेज में हो सकता है।
झिलमिलाहट

मुझे MariaDB मिला। pidof mysqldएक पीआईडी ​​देता है। हालांकि, अगर मैं टाइप करता हूं तो pidof Mariadbकुछ भी नहीं लौटाया जाता है। क्या यह MariaDB और MySQL दोनों के लिए समान PID है?
पाथरोस

18

मैंने पाया है कि "-i" को जोड़कर और असंवेदनशील आउटपुट प्राप्त करने के लिए "कुल्हाड़ी" के बजाय "aux" का उपयोग करके केस असंवेदनशील खोज का उपयोग करना अच्छा है:

ps aux | grep -i firefox

यदि आप उन सभी प्रक्रियाओं को मारना चाहते हैं जो आप उपयोग कर सकते हैं:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

यह एक जबरदस्त मार है। यदि आप एक नरम मार चाहते हैं तो "-9" को गिरा दें।


5
यह ps aux | grep -i firefox...प्रक्रिया को भी मारता है, क्योंकि इसमें पाठ शामिल है firefox!
एरिक

1
@ आप grep -i firefo[x]केवल फायरफॉक्स का उपयोग करने के लिए उपयोग कर सकते हैं
विज्ञापन

@ जॉन-फोले के उपयोग की सलाह कभी नहीं -9के साथ kill, देखने के लिए यहाँ स्पष्टीकरण के लिए

3

यदि आप केवल पीआईडी ​​चाहते हैं (ऑटोकिल स्क्रिप्ट के लिए उपयोगी, आदि ...)

pgrep -f desired_program_name

1

उबन्टु 16.04 LTS चलाने वालों के लिए, आपको केवलps axps कमांड लाइन पर ही उपयोग करना चाहिए , न कि अन्यथा आप केवल उस विशेष टर्मिनल उदाहरण से स्पॉनिंग प्रक्रियाएँ प्राप्त करेंगे जो आप कर रहे हैं। (आमतौर पर सिर्फ 'बैश' [शेल आप कर रहे हैं)। ] और 'ps' [क्या आप अभी भागे हैं])


मुझे पसंद है ps -e(सभी दिखाता है) और ps -ejH(एक प्रक्रिया पेड़ दिखाता है)।
एंड्रयू

1
@ अच्छा, यह वास्तव में बहुत प्यारा है - टिप के लिए धन्यवाद
cygnus_x1

0

आप एक अन्य टर्मिनल भी खोल सकते हैं (या किसी अन्य प्रकार से स्विच कर सकते हैं) और चलाएं top, जो मूल रूप से सिस्टम मॉनिटर का एक पाठ संस्करण है। पहला कॉलम प्रत्येक चलने वाली प्रक्रिया के PID को सूचीबद्ध करता है, जिसे आप दबाकर मार सकते हैं K, PID में प्रवेश कर सकते हैं और फिर भेजने के लिए एक संख्यात्मक संकेत दर्ज कर सकते हैं।


0

तुम यह कर सकते थे:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

पहले दो पाइपों को प्रक्रिया की जानकारी मिलती है, अगले हम पुराने स्कूल के कट का उपयोग करके पीआईडी ​​कॉलम प्राप्त करने की कोशिश करते हैं और फिर हम मारने के लिए परिणामी पीआईडी ​​देते हैं।


kill -9एक प्रक्रिया को मारने के लिए सबसे बड़ी बंदूक है। प्रक्रिया को अपने संसाधनों को साफ करने का मौका देने के लिए SIGKILL का सहारा लेने से पहले आपको पहले एक अधिक सौम्य संकेत की कोशिश करनी चाहिए।
बाइट कमांडर

यह सच है @ByteCommander। मैं इसे एक लाइनर बनाना चाहता था जो काम कर लेगा।
एरियन सोल्टानी सेप

0
top

या

screen -list|ls

सभी पीआईडी ​​को इसी प्रक्रिया के साथ सूचीबद्ध करें

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