সাধারণভাবে বলতে গেলে, আমি মনে করি না আপনি দুর্ভাগ্যজনকভাবে পারেন। (কিছু অপারেটিং সিস্টেম এটির জন্য সরবরাহ করতে পারে তবে আমি যেগুলি সমর্থন করি তা সম্পর্কে আমি অবগত নই))
উত্স সীমা জন্য রেফারেন্স ডক: getrlimit
POSIX 2008 থেকে।
উদাহরণস্বরূপ সিপিইউ সীমা গ্রহণ করুন RLIMIT_CPU
।
- প্রক্রিয়াটি নরম সীমা ছাড়িয়ে গেলে, এটি প্রেরণ করা হয় a
SIGXCPU
- প্রক্রিয়া যদি হার্ড সীমা ছাড়িয়ে যায় তবে এটি একটি সমতল হয়ে যায়
SIGKILL
আপনি যদি wait()
আপনার প্রোগ্রামটিতে পারেন তবে আপনি বলতে পারেন এটি দ্বারা হত্যা করা হয়েছে কিনা SIGXCPU
। তবে আপনি SIGKILL
বাইরে থেকে সরল পুরানো কিল থেকে কঠোর সীমা লঙ্ঘনের জন্য প্রেরিতকে আলাদা করতে পারেন না । আরও কী, যদি প্রোগ্রামটি পরিচালনা করে তবে XCPU
আপনি বাইরে থেকে তা দেখতে পাবেন না।
একই জিনিস RLIMIT_FSIZE
। প্রোগ্রামটি যদি এটি পরিচালনা না করে তবে আপনি স্থিতি SIGXFSZ
থেকে দেখতে wait()
পারেন। তবে একবার ফাইলের আকারের সীমা অতিক্রম করলে, কেবলমাত্র ঘটে যাওয়া ঘটনাটি হ'ল আরও যে I / O সেই সীমাটি আবার পরীক্ষা করার চেষ্টা করে তা কেবল সহজেই পাবে EFBIG
- এটি প্রোগ্রামটি অভ্যন্তরীণভাবে পরিচালনা করা হবে (বা না, দুর্ভাগ্যক্রমে)। যদি প্রোগ্রামটি হ্যান্ডেল করে SIGXFSZ
, উপরের মতো - আপনি এটি সম্পর্কে জানতে পারবেন না।
RLIMIT_NOFILE
? ভাল, আপনি এমনকি একটি সংকেত পাবেন না। open
এবং বন্ধুরা কেবল EMFILE
প্রোগ্রামে ফিরে আসে। এটি অন্যথায় বিরক্ত করা নয়, সুতরাং সেই পরিস্থিতিতে ব্যর্থ হওয়ার যে কোনও উপায়ে কোড করা হয়েছিল তা (অথবা না) এটি ব্যর্থ হবে।
RLIMIT_STACK
? পুরাতন ভাল SIGSEGV
, একটি বিতরণ করার অন্যান্য কারণগুলির স্কোর থেকে আলাদা করা যায় না। (আপনি জানবেন যে এটিই প্রক্রিয়াটিকে হত্যা করেছিল, যদিও wait
স্ট্যাটাস থেকে from )
RLIMIT_AS
এবং RLIMIT_DATA
কেবল তৈরি করবে malloc()
এবং আরও কয়েকজন ব্যর্থ হতে শুরু করবে (বা SIGSEGV
লিনাক্সের স্ট্যাকটি প্রসারিত করার সময় AS সীমাতে আঘাত হ্রাস পেলে গ্রহণ করুন)। প্রোগ্রামটি খুব ভালভাবে লেখা না থাকলে এটি সম্ভবত পর্যায়ে এলোমেলোভাবে ব্যর্থ হবে।
সুতরাং সংক্ষেপে, সাধারণত, ব্যর্থতা হয় অন্য প্রক্রিয়া মৃত্যুর কারণগুলির তুলনায় দৃশ্যমানভাবে পৃথক নয়, সুতরাং আপনি নিশ্চিত হতে পারবেন না, বা কখন / কখন / কীভাবে এগিয়ে চলেছে তা কোনও প্রোগ্রাম থেকে সিদ্ধান্ত নেওয়া হয়, তবে আপনি না বাইরে থেকে.
আমি যতদূর জানি আপনি সেরাটি করতে পারেন আপনার কোডটি কাঁটাচামচ লিখে কিছুটা কোড লিখুন, এটির জন্য অপেক্ষা করুন এবং:
- সনাক্ত করতে প্রস্থান স্থিতি পরীক্ষা করুন
SIGXCPU
এবং SIGXFSZ
(এএফআইকে, এই সংকেতগুলি কেবলমাত্র ওএস দ্বারা উত্স সীমাবদ্ধতার সমস্যার জন্য তৈরি করা হবে)। আপনার যথাযথ প্রয়োজনের উপর নির্ভর করে আপনি ধরে নিতে পারেন SIGKILL
এবং SIGSEGV
এটি সম্পদ সীমাতেও সম্পর্কিত ছিল তবে এটি কিছুটা প্রসারিত।
getrusage(RUSAGE_CHILDREN,...)
অন্যগুলি সম্পর্কে একটি ইঙ্গিত পেতে আপনি নিজের প্রয়োগ থেকে কী বেরোতে পারেন তা দেখুন ।
ওএস-নির্দিষ্ট সুবিধাগুলি এখানে (সম্ভবত ptrace
লিনাক্স, বা সোলারিসের মতো জিনিসগুলি dtrace
) বা সম্ভবত ডিবাগার ধরণের কৌশলগুলি সহায়তা করার জন্য উপস্থিত থাকতে পারে তবে এটি আপনার নির্দিষ্ট প্রয়োগের সাথে আরও জড়িত হতে চলেছে।
(আমি আশা করছি যে অন্য যে কোনও জাদু বিষয়টির সাথে জবাব দেবে যা সম্পর্কে আমি সম্পূর্ণ অজানা))
malloc
তবে দুর্ভাগ্যক্রমে এটি মেমরির সমস্যাটি সাধারণভাবে সমাধান করে না, কারণ এটি সাধারণভাবে সিস্টেম কলbrk
(আমি ঠিক আছি?) সম্পর্কিত।