فرمان kill برای ارسال سیگنالها به پردازش در حال اجرا به کار میرود. به عنوان یک عمل راحت، سیگنال "0" که موجود نیست میتواند برای پی بردن به در حال اجرا بودن یک پردازش به کار برود:
# Bourne myprog & # برنامه را در پس زمینه آغاز میکند daemonpid=$! # ...و شماره پردازش آن را ذخیره میکند while sleep 60 do if kill -0 $daemonpid # آیا پردازش هنوز زنده است؟ then echo >&2 "OK - process is still running" else echo >&2 "ERROR - process $daemonpid is no longer running!" break fi done
این یکی از آن پرسشهایی است که معمولاً مسئله عمیقتری را پوشش میدهد. نادر است که شخصی بخواهد بداند آیا پردازشی هنوز واقعاً در حال اجرا میباشد برای اینکه چراغ سبز یا قرمزی را برای متصدی روشن کند.
بیشتر اوقات، تقریباً انگیزهای فراتر وجود دارد، ازقبیل تمایل به اطمینان از آنکه آیا سرویسی که به طور مکرر عامل از کار افتادن سیستم شناخته شده، بازهم در حال اجرا میباشد. اگر این حالت است، بهترین راهکار تصحیح برنامه یا پیکربندی آنست به طوریکه از کارافتادن متوقف شود. اگر نمیتوانید این کار را انجام بدهید، پس فقط وقتی میمیرد restart کنید:
# POSIX while true do myprog && break sleep 1 done
این قطعه کُد برنامه myprog را اگر با کُد وضعیت دیگری غیر از صفر خاتمه یابد(نشان دهنده وجود یک اشتباه)، شروع مجدد (restart) میکند. اگر کُد وضعیت صفر است(به طور موفقیت آمیز تمام شود) حلقه پایان مییابد. (اگر پردازش شما سقوط میکند اما کد وضعیت صفر نیز برمیگرداند، پس کُد را طبق آن تنظیم کنید.) توجه نمایید که myprog باید در پیش زمینه اجرا شود. اگر به طور خودکار خودش را به حالت daemon میبرد، شما مست هستید.
برای مباحثه بسیار بهتر در باره این مسائل مدیریت پردازش یا پرسش و پاسخ شماره 33 را ببینید.
پرسش و پاسخ 42 (آخرین ویرایش 2012-10-27 10:38:13 توسط a88-114-128-29)