मैं वास्तव में वास्तव में प्रदर्शित करता हूं कि इस प्रकार की बात यहां दूसरे उत्तर में कैसे हो सकती है । यह जवाब एक सवाल था कि पृष्ठभूमि प्रक्रिया द्वारा 2 लॉग बनाए गए थे, इसलिए मैंने इसे 10 के साथ प्रदर्शित किया।
डेमो स्क्रिप्ट
cat <<-\DEMO >|${s=/tmp/script}
printf 'tty is %s\nparent pid is %s\npid is pid=%s\n' \
"$(tty)" "$PPID" "$$"
exec 1>&2 ; nums=$(seq 0 9)
rm ${files=$(printf "/tmp/file%s\n" $nums)}
for n in $nums ; do { for f in $files ; do
echo "Line $n" >>"$f" ; done
sleep 1 ; } ; done
#END
DEMO
डेमो चलाएं
s=/tmp/script ;chmod +x $s ;info="$(($s &)2>&- &)"
echo "$info" ; pid="${info##*=}" ; echo
while ps -p $pid >/dev/null ; do sleep 3 ; done
for f in /tmp/file[0-9] ; do
printf 'path : %s\tline count : %s\n' \
$f $(<$f wc -l)
done
आउटपुट:
tty is not a tty
parent pid is 1
pid is 12123
path : /tmp/file0 line count : 10
path : /tmp/file1 line count : 10
path : /tmp/file2 line count : 10
path : /tmp/file3 line count : 10
path : /tmp/file4 line count : 10
path : /tmp/file5 line count : 10
path : /tmp/file6 line count : 10
path : /tmp/file7 line count : 10
path : /tmp/file8 line count : 10
path : /tmp/file9 line count : 10
ऊपर दिखाया गया है। यह बनाता है और चलाता है नाम के एक स्क्रिप्ट /tmp/script
, chmod
's निष्पादन योग्य के रूप में यह है, और में इसे चलाता &background
एक की &backgrounded ( subshell )
।
स्क्रिप्ट rms /tmp/file0-9
10 फाइलें और echoes
उनमें से सभी 10 में हर सेकंड एक लाइन। मैं कुछ $info
विवादास्पद प्रक्रिया से कब्जा कर लेता हूं और इसे $(command substitution). While ps
अभी भी आई $pid
कैप्चर की रिपोर्ट के माध्यम से प्रस्तुत करता हूं, मुझे पता है कि यह अभी भी चलता है इसलिए मैं sleep.
इसे पूरा करता हूं , सभी 10 फाइलों में पंक्तियों को गिना जाता है।wc.
इस तरह से एक प्रक्रिया को लागू करने के बाद आप इसकी मूल मूल प्रक्रिया को स्वतंत्र रूप से बंद कर सकते हैं और यह ट्रकिंग पर रहेगा - यह प्रभावी रूप से विख्यात है। यह भी मतलब है कि आप पारंपरिक उपयोग नहीं कर सकते wait
आदेश है, लेकिन पर इंतजार कर ps
के बदले किसी भी मामले में और अधिक मजबूत किया जाना चाहिए।
वर्थ उल्लेख, मुझे लगता है, यह है कि प्रक्रिया वास्तव में शुरू में कहा जाता है $(command substitution)
और printfs
मुझे $info
मैं चाहता हूं ताकि मैं इसे प्रभावी रूप से नियंत्रित कर सकूं। लेकिन जैसे ही इसके साथ इसका टर्मिनल आउटपुट गिरता है exec 1>&2
(जो2>&-
इसके साथ उसी सबस्क्रिप्शन में बंद हो जाता है ), प्रक्रिया बच जाती है और मुझे दूसरे छोर पर इसके लिए इंतजार करना पड़ता है। दोनों दुनियाओं में से सबसे अच्छा Kinda, खासकर यदि आप इसका उपयोग इनपुट पाइप को संभालने के लिए करते हैं, तो जब तक आप अपने मन को सभी पुनर्निर्देशनों और प्रक्रिया के नेताओं के चारों ओर लपेट सकते हैं।
बाकी सब कुछ यहाँ प्रदर्शन के लिए है। आपको इसे चलाने की आवश्यकता है और यह शीर्ष स्क्रिप्ट है:
info="$(($script_path &)2>&- &)"
नोट: यह केवल टर्मिनल को प्रिंट करता है जो मैंने इसे प्रदर्शित करने की इच्छा की थी। जैसा कि$PPID,
इस प्रक्रिया से विख्यात है, टर्मिनल द्वारा विस्थापित है और इसका प्रत्यक्ष बच्चा है$PID 1.
यदि आप इनमें से दो को समवर्ती रूप से चलाना चाहते हैं और उनके लिए इंतजार करना चाहते हैं तो आप ps
उनके दोनों पलकों को हाथ लगा सकते हैं और प्रतीक्षा कर सकते हैं।