আমি বাস্তবে ঠিক এখানে প্রদর্শন করেছি যে এই ধরণের জিনিসটি এখানে অন্য উত্তরে কীভাবে করা যেতে পারে । এই উত্তরটি একটি ব্যাকগ্রাউন্ড প্রক্রিয়া দ্বারা 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
'গুলি এক্সিকিউটেবল যেমন, আর তাতে রান &background
A -এর &backgrounded ( subshell )
।
স্ক্রিপ্ট rms /tmp/file0-9
10 ফাইল এবং echoes
প্রতি 10 সেকেন্ডে সেগুলিতে 10 টির জন্য একটি লাইন। আমি $info
অস্বীকার করা প্রক্রিয়া থেকে কিছু ক্যাপচার করি এবং এটি ক্যাপচারের $(command substitution). While ps
বিষয়ে এখনও রিপোর্টের মাধ্যমে উপস্থাপন করি $pid
, আমি জানি এটি এখনও চলছে তাই আমি sleep.
যখন এটি শেষ হয় তখন সমস্ত 10 টি ফাইলের লাইনগুলি গণনা করা হয়wc.
আপনি কোনও প্রক্রিয়াটি এভাবে শুরু করার পরে আপনি নির্ধারিতভাবে এর মূল পিতামহীন প্রক্রিয়াটি বন্ধ করতে পারেন এবং এটি ট্রাক চালিয়ে যাবে - এটি কার্যকরভাবে অস্বীকার করা হয়েছে। এটাও মানে আপনি প্রচলিত ব্যবহার করতে পারবেন না wait
কমান্ড, কিন্তু অপেক্ষায় ps
'র আগমন কোনো ক্ষেত্রে আরো জোরালো হওয়া উচিত।
উল্লেখযোগ্য, আমি মনে করি, প্রক্রিয়াটি আসলে প্রাথমিকভাবে ডেকে আনা হয় $(command substitution)
এবং printfs
আমি যে $info
আমি চাই তাই কার্যকরভাবে এটি নিয়ন্ত্রণ করতে পারি। তবে এটির সাথে তার টার্মিনাল আউটপুটটি ড্রপ হওয়ার সাথে সাথে exec 1>&2
(যা একই সাবশেলে বন্ধ রয়েছে 2>&-
), প্রক্রিয়াটি পালিয়ে যায় এবং আমাকে অন্য প্রান্তে এটির জন্য অপেক্ষা করতে হবে। উভয় বিশ্বের সেরা কিন্ডা, বিশেষত আপনি যদি ইনপুট পাইপগুলি হ্যান্ডেল করতে ব্যবহার করেন, তবে যতক্ষণ আপনি আপনার মনকে সমস্ত পুনঃনির্দেশ এবং প্রক্রিয়া নেতাদের চারপাশে গুটিয়ে রাখতে পারেন।
অন্য সব কিছুই এখানে প্রদর্শনের জন্য। আপনার এটি চালানোর জন্য যা দরকার তা হ'ল শীর্ষস্থানীয় স্ক্রিপ্ট এবং:
info="$(($script_path &)2>&- &)"
দ্রষ্টব্য: এটি কেবলমাত্র টার্মিনালে প্রিন্ট করে আমি ঠিক এটি প্রদর্শন করতে চাইছিলাম। $PPID,
এই প্রক্রিয়াদ্বারা উল্লিখিত হিসাবেএই প্রক্রিয়াটি টার্মিনাল দ্বারা অস্বীকার করা হয় এবং এর প্রত্যক্ষ শিশু$PID 1.
আপনি যদি এই দুটি দুটি একযোগে চালাতে চান এবং তাদের জন্য অপেক্ষা করতে পারেন তবে আপনি কেবল ps
তাদের উভয় পিড হস্তান্তর করতে এবং অপেক্ষা করতে পারেন।