2010-04-22 21 views
5

मैं एक बैश स्क्रिप्ट बनाना चाहता हूं जो दो प्रक्रियाओं को लॉन्च करेगी और पहली बार होने पर दूसरी प्रक्रिया को मार डालेगा। यहां एक उदाहरण दिया गया है:दो प्रक्रियाओं को फोर्क करें और पहली बार किया जाता है जब पहली बार किया जाता है

 
#fork first process 
producer& 

#fork second process 
consumer& 

#wait for producer to finish 
... 

#kill the consumer 
... 

मुझे लगता है कि यह बदसूरत हो सकता है लेकिन इसका एक बहुत ही सरल समाधान है। कृपया मुझे रिक्त स्थान भरने में मदद करें।

उत्तर

12
foo & pid_foo=$! 
bar & pid_bar=$! 

wait $pid_foo 
kill $pid_bar 

लेकिन शायद तुम सिर्फ foo | bar चला सकते हैं (यदि stdin/stdout से निपटने के साथ काम करने से होता है)।

+0

पाइप चालाक है, लेकिन शायद आप नहीं करना चाहते हैं stdin/stdout परिणाम – frankc

+1

आप पीआईडी ​​की जरूरत नहीं है, आप% 1 का उपयोग कर सकते,% 2 – topskip

+1

@Patrick: प्रक्रियाओं वास्तव में सिर्फ गिने जा रहे हैं तो , जो समझ में आता है। सामान्य मामले में, हालांकि, यह 'pid_foo' और' pid_bar' चर को नाम देने के लिए अधिक समझ में आता है, और यह '% 1' और'% 2' से कोड पढ़ने पर अधिक स्पष्ट है। हालांकि, यह उल्लेख करने के लिए धन्यवाद कि यह संभावना मौजूद है (कम से कम बाश में)। – ndim

3
#!/bin/bash 

#enable job control in script 
set -m 

producer & 

consumer & 

fg %1 

kill %2 
संबंधित मुद्दे