2009-10-22 5 views
7

के अंदर अपने नाम का उपयोग कर प्रक्रिया को मारें, यह काम करता है, लेकिन यह प्रत्येक पायथन प्रक्रिया को मारता है।लिनक्स (पायथन)

pkill python 

हालांकि, मैं ऐसा नहीं कर सकते:

pkill myscript.py 

मैं भी killall की कोशिश की है, लेकिन या तो कोई भाग्य के साथ। क्या मुझे नियमित अभिव्यक्तियों का उपयोग करना है?

वैसे, मैं इसे आयात ओएस के साथ एक अजगर लिपि में करना चाहता हूं।

उत्तर

5

क्या आपने उसी स्क्रिप्ट से पाइथन उपप्रोसेसर लॉन्च किया था जिसे आप इसे मार रहे हैं? यदि ऐसा है, तो विवरण के लिए this question देखें। यदि नहीं, तो आप पाइथन प्रक्रिया की तर्क सूची में स्क्रिप्ट नाम की खोज के लिए pkill 's -f विकल्प का उपयोग कर सकते हैं, लेकिन फिर भी आप किसी ऐसी चीज को मारने का जोखिम चलाते हैं जिसका आप इरादा नहीं रखते थे। अधिक जानकारी के लिए man page देखें।

0

आपको प्रक्रिया आईडी (पिड) को देखने की आवश्यकता है। आप "ps -A | grep NAME" कमांड का उपयोग कर सकते हैं और फिर "kill -9 pID" लागू कर सकते हैं। इन आदेशों को आसानी से पाइथन में अनुवादित किया जा सकता है।

"नाम" (जैसे कि पिक्ल में) का उपयोग करने का प्रयास करने से कई मैचों और इस प्रकार अप्रत्याशित परिणाम मिल सकते हैं (कम से कम प्रश्न में ऊपर दिए गए संदर्भ में)।

+0

मार डालेगा कैसे है कि 'pkill' से अलग है? – hasen

+0

आपको एक पिड का उपयोग करने की आवश्यकता नहीं है। आप प्रक्रिया की पहचान करने के किसी भी साधन का उपयोग कर सकते हैं कि आपकी प्रक्रिया हत्यारा आपको उपयोग करने की अनुमति देता है। सभी * निक्स आंतरिक रूप से एक पिड का उपयोग करते हैं, लेकिन कभी-कभी लोग केवल एक विशिष्ट पिड न केवल पैटर्न से मेल खाने वाली सभी प्रक्रियाओं को मारना चाहते हैं। –

+0

... लेकिन अंत में आप एक पिड पर उतर जाते हैं: जैसा कि मैंने ऊपर बताया है, किसी अन्य माध्यम से जाकर अनपेक्षित प्रक्रिया को मारने के लिए एक और परिवर्तन है। वहाँ गया। – jldupont

2

क्या आप इस प्रक्रिया को pid फ़ाइल में लिखने में सक्षम हैं?
अजगर में आप इस तरह पीआईडी ​​मिलती है:

import os 
os.getpid() 

किलिंग नाम से सुविधाजनक है, लेकिन कभी कभी परिणाम अवांछित है के रूप में आप देख चुके हैं।

+1

मुझे लगता है कि वह (नियमित) कमांड लाइन से एक विशिष्ट पायथन स्क्रिप्ट को मारने की कोशिश कर रहा है, पाइथन – hasen

+0

से कुछ नहीं करता दोनों पर लागू होता है। मैं pkill myscript.py का उपयोग करना चाहता हूं ... यह जानने के लिए कि कमांड लाइन – TIMEX

+1

@ हसन में इसे कैसे करें, फिर भी यदि आपके पास एक पिड फ़ाइल है, तो 'बिल्ली' पिट 'को' बैकटिक्स ' '' –

-1

इस प्रयास करें:

echo '#!/usr/bin/env python' > myscript 
cat myscript.py >>myscript 
chmod +x myscript 
./myscript 
बेशक

आप "myscript" नामक एक प्रक्रिया यूनिक्स सिस्टम पर मारने के लिए कोड बदलने के लिए होगा, एक निष्पादन योग्य फ़ाइल शुरुआत में कुछ बाइट्स जो ओएस बता शामिल क्या बाइनरी प्रारूप का उपयोग किया जा रहा है। यदि पहले दो बाइट #! हैं तो ओएस मानता है कि यह वास्तव में एक टेक्स्ट फ़ाइल है जिसे किसी अन्य प्रोग्राम द्वारा निष्पादित किया जा सकता है, और ओएस अन्य प्रोग्राम लोड करता है और पाठ फ़ाइल को पास करता है।

इस मामले में शायद मैं शीर्ष रेखा पर #!/usr/bin/python लिख सकता था, लेकिन यदि आपका अजगर /usr/local/bin में है, तो यह काम नहीं करेगा। इसके बजाय, मैं पाइथन के लिए अपना सामान्य पथ खोजने के लिए env का लाभ उठाता हूं। सभी यूनिक्स सिस्टम में/usr/bin में env है। थोड़ी अधिक जानकारी के लिए आप man env टाइप कर सकते हैं।

2

sudo kill -9 `pgrep python`

यह आदेश सभी चल अजगर प्रक्रियाओं

संबंधित मुद्दे