एक बैश बच्चे की पीआईडी ​​सफल (इम्प्सेप्सिंक) - आप इसे कैसे प्राप्त करते हैं?


15

क्या कोई मुझे बता सकता है कि कैसे bash में निष्पादित कमांड की PID प्राप्त की जाए।

जैसे मेरे पास एक bash स्क्रिप्ट है जो imapsync चलाता है।

जब स्क्रिप्ट को मार दिया जाता है, तो इम्प्सेप्सु प्रक्रिया को हमेशा नहीं मारा जाता है, इसलिए मैं अपनी स्क्रिप्ट से प्रोग्राम के imapsync के पीआईडी ​​की पहचान करने में सक्षम होना चाहता हूं, ताकि मैं खुद को सिग्नल हैंडलर में इम्प्सेप्सिन प्रक्रिया को मार सकूं।

तो मैं मूल रूप से एक पैरेंट बैश स्क्रिप्ट से एक बच्चे की प्रक्रिया का पीआईडी ​​कैसे प्राप्त करूं?


1
कैसे के बारे में "पिडोफ इम्प्सेप्सिन"? इसके साथ गलत क्या है?
पित्र

2
मुझे पिडोफ के बारे में नहीं पता था। हालाँकि अब जो मैं करता हूं, यह इस परिदृश्य के लिए उपयोगी नहीं है, जहां तक ​​मैं बता सकता हूं, क्योंकि पिडोफ किसी सिस्टम पर दिए गए कमांड की सभी सफलताओं को वापस करता है - यहां तक ​​कि अन्य लिपियों / उपयोगकर्ताओं के स्वामित्व वाले भी। इसके अलावा imapsync वास्तव में एक perl स्क्रिप्ट है, इसलिए मैं एक pidof पर्ल करूंगा, जो फिर से उन प्रक्रियाओं को वापस करने की संभावना है जो imapsync नहीं हैं और अन्य उपयोगकर्ताओं के हो सकते हैं।
जेसन टैन

जेवियर सही है। यह पेज ProcessManagement के बारे में अधिक जानकारी प्रदान करेगा ।
15:14 बजे

जवाबों:


4

imapsync के पास यह सेट करने का विकल्प होता है कि उसका pid कहाँ लिखा है:

--pidfile: वह फ़ाइल जहाँ imapsync pid लिखी जाती है।


FYI करें यह वास्तव में एक सामान्य अर्थ में मेरे प्रश्न का उत्तर नहीं देता है, लेकिन मैंने thepidfile arg की खोज की और इसके आस-पास कुछ फ़फ़िंग के साथ अब तक काफी अच्छा रहा है ..
जेसन टैन

@JasonTan एक आदमी को मछली क्यों सिखाता है, जब आप उसे एक स्वादिष्ट प्री-कुक्ड फिलाट दे सकते हैं, तो वह वापस आता है और आपको और अधिक, कल, एह के लिए नंगा कर देता है? पुराने पोस्ट के लिए खेद है, लेकिन जेवियर के इस जवाब को क्यों स्वीकार करें?
असुरक्षित

46
any_command args &
my_child_PID=$!

IOW, $$आपकी PID की तरह ही है$! , सबसे हाल ही में निष्पादित पृष्ठभूमि कमांड का PID है ।


धन्यवाद, लेकिन imapsync पृष्ठभूमि और $ नहीं है! यह सेट नहीं है अगर मैं इसे इप्सुसिंक इनवोकेशन या सिग्नल हैंडलर की पहली लाइन के बाद अगली पंक्ति पर गूँजता हूं। :-(
जेसन टैन

6
यदि यह बच्चे को कांटे और पृष्ठभूमि देता है, तो यह माता-पिता की जिम्मेदारी है कि वह बच्चे के पीआईडी ​​को कहीं न कहीं बचाए। सामान्य अभ्यास कहीं न कहीं इसे बचा रहा है /var/run/whatever.pid। हो सकता है कि पीआईडी ​​को बचाने के लिए यह पूछने के लिए एक कमांड-लाइन विकल्प हो; यदि नहीं, तो यह लेखक को पूछने या खुद को लागू करने की सुविधा की तरह लगता है।
जेवियर

1
पृष्ठभूमि पर जोर दिया । यदि कोई प्रक्रिया पृष्ठभूमि में नहीं रखी गई है (यानी, संलग्न के साथ &), तो $!चर अपरिभाषित है।
ट्रेवर

1
इसी तरह के समाधानों में सुझाव दिया गया है (एक उत्तर) कि कैसे बस शुरू की गई प्रक्रिया से छुटकारा पाना है ; इस उत्तर के लिए एक अतिरिक्त के रूप, एक टिप्पणी वहाँ का कहना है: ओह, और "oneliner": /bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &- sysfault नवंबर 24 '10 14:28 पर
IMZ - इवान Zakharyaschev

10

इसके विपरीत pidof, pgrepयह प्रतिबंधित करने के लिए विभिन्न विकल्प दिए जा सकते हैं कि यह किस प्रक्रिया के लिए पीआईडी ​​लौटाता है। मौजूदा प्रक्रिया के पीआईडी ​​का उपयोग करके पीपीआईडी ​​के आधार पर चयन करने के लिए विशेष रूप से उपयोगी हो सकता है।

pgrep -P $$ imapsync

यदि वे आपकी स्क्रिप्ट के बच्चे हैं तो केवल PIDs के imapsync को आउटपुट करेंगे।


0

कैसे पल में imapsync डालने के बारे में, PID हो रही है और फिर इसे अग्रभूमि ... कुछ इस तरह:

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