পাইপলাইনে পূর্বের কমান্ডের পিআইডি প্রাপ্ত


11

আমি inotifywaitএকটি ডিরেক্টরি নিরীক্ষণ করতে ব্যাশ স্ক্রিপ্ট লিখছি এবং যখন পরিবর্তনগুলি সনাক্ত হয় তখন ক্রিয়া বন্ধ করে দিন। কিছুটা এইরকম:

inotifywait -m ... | while read f; do something; done

যেহেতু inotifywaitনিজেই শেষ হয় না, তাই এই স্ক্রিপ্টটি থামবে না।

সুতরাং আমার পরিকল্পনাটি ছিল ইনোটিফয়েট প্রক্রিয়াটির পিআইডি পাওয়ার জন্য, এটি একটি ফাইলে সংরক্ষণ করুন এবং একটি আলাদা প্রক্রিয়া এটি পরে মেরে ফেলা হবে, যেমন বলুন:

inotifywait -m ... | { echo ??PID?? > pid-file; while ... }

তবে পিআইডি কীভাবে পেতে হয় তা আমি জানি না। এটি অর্জন করার কোন সহজ উপায় আছে? আরেকটি উপায় হ'ল $$ফাইলটিতে শেল-স্ক্রিপ্টের পিআইডি সংরক্ষণ করা এবং পুরো শেল-স্ক্রিপ্টটি মেরে ফেলা তবে আমি লুপের পরে কিছুটা পরিষ্কার করতে চেয়েছিলাম।

আমি ব্যবহার করার চেষ্টা করেছি coprocএবং আমার মনে হয় এটি কার্যকর হবে তবে এটি প্রয়োজনীয়তার চেয়ে আরও জটিলতার মতো বলে মনে হচ্ছে।


আপনি এর মতো কিছু ব্যবহার করতে পারেন `PS -ef | গ্রেপ প্রক্রিয়া নাম | grep -v গ্রেপ | awk '{মুদ্রণ $ 2}' | xargs কিল -9 `
কিউই

@ কিউই - এই গণ্ডগোলের পরিবর্তে কেবল একটি করুন pgrep inotifywait। এটি আপনাকে পিআইডি দেবে, মেরে ফেলবে pkill inotifwait,।
slm

আপনার সিস্টেমের উপর নির্ভর করে @ এসএলএম আপনার প্রায়শই উপস্থিত থাকাকালীন গ্রিপ এবং পিএস করার সময় আপনার পিগ্রিপ এবং পিকিল থাকবে না। আপনি স্বাগত
কিউই

@ কিউই - সন্দেহজনক, এই সরঞ্জামগুলি বেশ সর্বব্যাপী। এছাড়াও আপনাকে একটি করার দরকার নেই grep -v grep, পরিবর্তে ps -ef | grep [p]rocessname...একই কাজ করবে।
slm

1
@ ডেভিডসন চুয়া - হ্যাঁ আপনি -fযদি এক্সিকিউটেবলের বেশিরভাগ নামের সাথে মেলে প্রয়োজন হয় তবে আপনি সুইচটি ব্যবহার করতে পারেন ।
slm

উত্তর:


6

পাইপলাইনে, সমস্ত প্রক্রিয়াগুলি একই সাথে শুরু হয় , অন্যগুলির তুলনায় এর আগে আর একটি হয় নি।

আপনি করতে পারেন:

(echo "$BASHPID" > pid-file; exec inotifywait -m ...) | while IFS= read -r...

বা বহনযোগ্য:

sh -c 'echo "$$" > pid-file; exec inotifywait -m ...' | while IFS= read -r...

আরও মনে রাখবেন যে whileলুপটি চালানো সাবসেল যখন শেষ inotifywaitহয়ে যায় তখন পরের বার স্টাডাউটের জন্য কিছু লিখলে তা স্বয়ংক্রিয়ভাবে মারা যায় killed



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.