कैसे प्रक्रिया और उपप्रकार दोनों को मारना है?


9

मैंने यह जानने के लिए एक प्रश्न पूछा कि पायथन के सबप्रोसेस मॉड्यूल से संदेश की कई लाइनें कैसे प्राप्त की जाए।

समस्या यह है कि परीक्षण के दौरान, मुझे अजगर प्रक्रिया को मारना पड़ा जो कि ग्नुसेस प्रक्रिया को चलाती है। कमांड लाइन में ^ c का उपयोग करने से अजगर प्रक्रिया को मारने लगता है, लेकिन सूक्ति नहीं।

ज्ञानी को मारने के लिए, मैं पीआई को ps aux के साथ प्राप्त करता हूं | grep gnuchess और रन मार -9 PID । क्या अजगर और ज्ञानी दोनों प्रक्रिया को मारने के लिए अन्य तरीके हैं?


8
रैंडम sidenote: आप उपयोग कर सकते हैं pkill, आपके तो नाम से एक प्रक्रिया को मारने के लिए ps aux | grep gnuchessऔर kill -9 PIDबस बन सकता हैpkill -9 gnuchess
माइकल Mrozek

जवाबों:


10

एक मानक विधि है, अगर कार्यक्रम सहयोग करते हैं। kill -- -42जहां मूल प्रक्रिया का पृष्ठ 42 है वहां चलाएं । यह प्रक्रिया 42 के द्वारा प्रोसेस ग्रुप लीड में सभी प्रक्रियाओं के लिए एक संकेत भेजता है (शून्य से पहले साइन साइन इन प्रोसेस ग्रुप समूह)।

आम तौर पर, यदि आप अपने पायथन स्क्रिप्ट को शेल प्रॉम्प्ट से चलाते हैं और यह बस कांटे लगाता है gnuchess, तो दो प्रक्रियाओं को एक ही प्रक्रिया समूह में रहना चाहिए। लेकिन ऐसा प्रतीत नहीं होता है, क्योंकि Ctrl+ पूरे अग्रभूमि प्रक्रिया समूह को Cभेजता SIGINTहै।

Gnuchess अपने स्वयं के प्रक्रिया समूह में हो सकता है क्योंकि यह खुद को एक सत्र का नेता बनाता था (लेकिन मुझे नहीं पता कि यह ऐसा क्यों करेगा), या क्योंकि आपने इसे डबल-फोर्क किया है (अजगर ने एक शेल की खोज की है जो कि gnuchess को खोजता है)। एक डबल कांटा संभवतः परिहार्य है, लेकिन मैं आपको यह नहीं बता सकता कि आपके कोड को देखे बिना कैसे।


इस gnuchessप्रक्रिया को देखने का एक विश्वसनीय और POSIX- अनुरूप तरीका है

gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')

विशिष्ट यूनिक्स वेरिएंट के पास इसे प्राप्त करने के बेहतर तरीके हो सकते हैं, जैसे कि pgrep


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