আমি একটি পার্ল স্ক্রিপ্ট লিখছি যা পিআইডি সংগ্রহ করার জন্য লগফিলগুলি পার্স করে এবং তারপরে সেই পিআইডি চলছে কিনা তা পরীক্ষা করে। আমি এই চেকটি করার সর্বোত্তম উপায় সম্পর্কে চিন্তা করার চেষ্টা করছি। স্পষ্টতই, আমি এরকম কিছু করতে পারি:
system("ps $pid > /dev/null") && print "Not running\n";
তবে, আমি যদি সম্ভব হয় তবে সিস্টেম কলটি এড়াতে পছন্দ করব। তাই আমি ভেবেছিলাম আমি /proc
ফাইল সিস্টেমটি ব্যবহার করতে পারি (বহনযোগ্যতা কোনও উদ্বেগ নয়, এটি সর্বদা লিনাক্স সিস্টেমে চলতে থাকবে) running উদাহরণ স্বরূপ:
if(! -d "/proc/$pid"){
print "Not running\n";
}
এটা কি নিরাপদ? আমি কি সবসময় অনুমান করতে পারি যে যদি কোনও /proc/$pid/
ডিরেক্টরি না থাকে তবে সম্পর্কিত পিআইডি চলছে না? আমি আশা করি যেহেতু এএফাইক ps
নিজে /proc
যেভাবেই এর তথ্য পায় তবে যেহেতু এটি প্রোডাকশন কোডের জন্য তাই আমি নিশ্চিত হতে চাই।
সুতরাং, এমন কোনও ঘটনা ঘটতে পারে যেখানে চলমান প্রক্রিয়াটির কোনও /proc/PID
ডিরেক্টরি নেই বা যেখানে একটি /proc/PID
ডিরেক্টরি বিদ্যমান এবং প্রক্রিয়াটি চলছে না? ps
ডিরেক্টরিটির অস্তিত্ব পরীক্ষা করার জন্য পার্সিং পছন্দ করার কোনও কারণ আছে কি ?
kill -0
এটি সেরা) এটি কেবল আপনাকে জানায় যে প্রদত্ত পিআইডি সহ কোনও চলমান প্রক্রিয়া রয়েছে কিনা । প্রক্রিয়াটি এখনও এক মিলি সেকেন্ড পরে চলবে কিনা তা আপনাকে জানায় না, এবং এটি আপনাকে জানায় না যে প্রক্রিয়াটি আপনার আগ্রহী বা একটি সম্পর্কযুক্ত প্রক্রিয়া যা আকর্ষণীয় প্রক্রিয়াটি মারা যাওয়ার পরে একই পিআইডি বরাদ্দ করেছে কিনা তা আপনাকে জানায় না whether । প্রদত্ত পিআইডি চলছে কিনা তা পরীক্ষা করা প্রায় সবসময়ই ভুল : খুব কম পরিস্থিতি রয়েছে যেখানে এটি জাতি শর্তে প্রবণ নয়।
kill
সিগন্যাল 0 ব্যবহার করে পার্ল ফাংশনটিও রয়েছে যা কোনও হত্যাকাণ্ড করে না তবে বলে যদি আপনি এটি করতে পারতেন (যেমন আপনার সেই প্রক্রিয়াটি সংকেত করার অনুমতি প্রয়োজন) need