خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
آشنایی با دستور Timeout در لینوکس
timeout یک ابزار خط فرمان است که یک فرمان تعیین شده ای را اجرا می کند و اگر بعد از مدت زمان مشخصی همچنان فرمان در حال اجرا باشد، آن را خاتمه می دهد. به عبارت دیگر، timeout به شما این امکان را می دهد که یک فرمان را با محدودیت زمانی اجرا کنید. دستور timeout بخشی از GNU core utilities package است که تقریبا می توان گفت در تمامی توزیع های لینوکس نصب است.
زمانی که می خواهید فرمانی را اجرا کنید که گزینه timeout ندارد، مفید است.
در این مقاله نحوه استفاده از دستور timeout لینوکس را توضیح می دهیم.
DURATION می تواند یک عدد صحیح مثبت یا یک عدد ممیز شناور باشد و حتی پیش از یکی از حروف زیر هم می تواند قرار بگیرد که هر کدام از حروف زیر نمایانگر یک مفهوم خاص هستند:
جلوتر مثال هایی را مشاهده خواهید کرد که درک توضیحات را ملموس تر خواهد کرد. هنگامی که هیچ واحدی را مشخص نکنید، به طور پیش فرض بر روی ثانیه تنظیم می شود. اگر مدت زمان روی صفر تنظیم شود، مهلت زمانی مرتبط غیرفعال می شود.
OPTIONS ها یا گزینه های فرمان باید قبل از آرگومان ها ارائه شوند.
خب، حالا به ذکر چند مثال از دستور timeout در لینوکس می پردازیم.
یک دستور را بعد از پنج ثانیه خاتمه دهید. مثلا دستور ping زیر پس از 5 ثانیه به اتمام می رسد. چون واحدی مشخص نکردیم، بصورت پیشفرض ثانیه فرض و لحاظ می شود.
حالا قصد داریم دستور ping را به مدت 5 دقیقه اجرا کنیم:
حالا دستور را به مدت 1 دقیقه و 6 ثانیه به پایان خواهیم برد. در این تیپ موارد، باید دستور را به فرم زیر اجرا کنید:
اگر میخواهید دستوری را اجرا کنید که به امتیازات بالاتری نیاز دارد، sudo را قبل از timeout وارد کنید(مثلا tcpdump)
ارسال سیگنال مشخص به دستور:
اگر سیگنالی داده نشود، پس از رسیدن به timeout، سیگنال SIGTERM را به فرمان مدیریت شده ارسال می کند. با استفاده از گزینه s- می توانید مشخص کنید که کدام سیگنال ارسال شود.
به عنوان مثال، برای ارسال SIGKILL به دستور ping بعد از یک دقیقه دستور زیر را اجرا کنید:
برای دریافت لیستی از تمام سیگنال های موجود، از دستور kill -l استفاده کنید:
SIGTERM، سیگنال پیشفرض ارسال شده در صورت تجاوز از محدودیت زمانی، میتواند توسط برخی فرآیندها نادیده گرفته شود. در این شرایط، پس از ارسال سیگنال پایان، فرآیند کماکان به کار خود ادامه میدهد.
برای اطمینان از بسته شدن از گزینه k- و سپس یک دوره زمانی استفاده کنید. هنگامی که این گزینه پس از رسیدن به محدودیت زمانی مورد استفاده قرار می گیرد، دستور timeout سیگنال SIGKILL را به برنامه ارسال می کند که نمی توان آن را نادیده گرفت.
در مثال زیر، timeout دستور را به مدت یک دقیقه اجرا می کند و اگر خاتمه نیاید، پس از ده ثانیه آن را Kill می کند:
زمانی که می خواهید فرمانی را اجرا کنید که گزینه timeout ندارد، مفید است.
در این مقاله نحوه استفاده از دستور timeout لینوکس را توضیح می دهیم.
How to Use the timeout Command
Syntax دستور timeout به صورت زیر می باشد:timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION می تواند یک عدد صحیح مثبت یا یک عدد ممیز شناور باشد و حتی پیش از یکی از حروف زیر هم می تواند قرار بگیرد که هر کدام از حروف زیر نمایانگر یک مفهوم خاص هستند:
s - seconds (default)
m - minutes
h - hours
d - days
جلوتر مثال هایی را مشاهده خواهید کرد که درک توضیحات را ملموس تر خواهد کرد. هنگامی که هیچ واحدی را مشخص نکنید، به طور پیش فرض بر روی ثانیه تنظیم می شود. اگر مدت زمان روی صفر تنظیم شود، مهلت زمانی مرتبط غیرفعال می شود.
OPTIONS ها یا گزینه های فرمان باید قبل از آرگومان ها ارائه شوند.
خب، حالا به ذکر چند مثال از دستور timeout در لینوکس می پردازیم.
یک دستور را بعد از پنج ثانیه خاتمه دهید. مثلا دستور ping زیر پس از 5 ثانیه به اتمام می رسد. چون واحدی مشخص نکردیم، بصورت پیشفرض ثانیه فرض و لحاظ می شود.
timeout 5 ping 8.8.8.8
حالا قصد داریم دستور ping را به مدت 5 دقیقه اجرا کنیم:
timeout 5m ping 8.8.8.8
حالا دستور را به مدت 1 دقیقه و 6 ثانیه به پایان خواهیم برد. در این تیپ موارد، باید دستور را به فرم زیر اجرا کنید:
timeout 1.1m ping 8.8.8.8
اگر میخواهید دستوری را اجرا کنید که به امتیازات بالاتری نیاز دارد، sudo را قبل از timeout وارد کنید(مثلا tcpdump)
sudo timeout 300 tcpdump -n -w data.pcap
ارسال سیگنال مشخص به دستور:
اگر سیگنالی داده نشود، پس از رسیدن به timeout، سیگنال SIGTERM را به فرمان مدیریت شده ارسال می کند. با استفاده از گزینه s- می توانید مشخص کنید که کدام سیگنال ارسال شود.
به عنوان مثال، برای ارسال SIGKILL به دستور ping بعد از یک دقیقه دستور زیر را اجرا کنید:
sudo timeout -s 9 ping 8.8.8.8
برای دریافت لیستی از تمام سیگنال های موجود، از دستور kill -l استفاده کنید:
kill -l
SIGTERM، سیگنال پیشفرض ارسال شده در صورت تجاوز از محدودیت زمانی، میتواند توسط برخی فرآیندها نادیده گرفته شود. در این شرایط، پس از ارسال سیگنال پایان، فرآیند کماکان به کار خود ادامه میدهد.
برای اطمینان از بسته شدن از گزینه k- و سپس یک دوره زمانی استفاده کنید. هنگامی که این گزینه پس از رسیدن به محدودیت زمانی مورد استفاده قرار می گیرد، دستور timeout سیگنال SIGKILL را به برنامه ارسال می کند که نمی توان آن را نادیده گرفت.
در مثال زیر، timeout دستور را به مدت یک دقیقه اجرا می کند و اگر خاتمه نیاید، پس از ده ثانیه آن را Kill می کند:
sudo timeout -k 10 1m ping 8.8.8.8
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: