في العادة عند تنفيذ الأوامر في الطرفية في لينيكس، لن يكون هناك وقت انتهاء محدد للأمر المطلوب تنفيذه. هناك العديد من الأوامر التي يتواجد بها مؤقت داخلي لمقاطعة العملية بعد مدة معينة ولكن الكثير من الأوامر لا تنتهي لوحدها في حال انها علقت في دائرة مغلقة أو في حال عدم اكتمالها في مدة معينة.
في هذه المقالة سوف نتعلم طريقة تحديد وقت انتهاء للأوامر داخل الطريفة من خلال طريقتين:
- أداة Timeout
- أداة Timelimit
1- أداة Timeout
لينيكس بقوم بتقديم أداة افتراضية مضمنه في جميع التوزيعات اسمها timeout وهي اداة تسمح لك بتنفيذ الأوامر داخل الطرفية مع تحديد مؤقت انتهاء العملية.
الطريقة الإفتراضية لإستخدام الأداة يتم من خلال كتابة اسمها وتحديد الوقت ومن ثم كتابة الأمر الخاص بك. مثلا عند تنفيذ أمر ping، سيقوم الأمر بالعمل الى ما لا نهاية وبالتالي يجب تحديد عدد المرات التي يعمل بها او ايقافة من خلال الاداة timeout كما في المثال التالي:
$ timeout 5 ping google.com
طبعا هناك بعض الاوامر التي قد تستمر بالعمل حتى عند تحديد وقت انتهاء لإيقافها ويجب تمرير أمر الإيقاف الإجباري “kill-after” وهو يقوم بتمرير إشارة لفرض إنهاء العملية بعد عدد معين من الثواني في حال عدم استجابة البرنامج لأمر الإيقاف.
لتنفيذ أمر timeout مع تمرير أمر الإيقاف الإجباري، يجب كتابة الامر وبعده استخدم المفتاح –kill-after وتحديد وقت التأخر في تنفيذ الإيقاف الإجباري بعد فشل البرنامج للاستجابة لوقت الإنهاء الطبيعي ومن ثم تحديد وقت الإيقاف الطبيعي وبعده الأمر. مثال:
$ timeout --kill-after 3 5 ping google.com
يمكن كتابة وقت الإنتهاء بدون تحديد نوعه وسيتم اعتبار الوقت على أساس أنه بالثانية. في حال اردت تحديد مدة الإيقاف “دقيقة ساعة” مثلا لتحديد وقت انتهاء بالدقيقة يمكن كتابة حرف m بعد الوقت مباشرة بدون فراغات. مثلا:
5m
لتحديد وقت انتهاء بالساعة يمكن كتابة حرف h بعد الوقت مباشرة بدون فراغات. مثلا:
5h
2- أداة timelimit
هذه الأداة متوفرة بشكل مباشر لتوزيعات Debian و Arch فقط. باقي التوزيعات بحاجة لتنزيل الكود المصدري وعمل بناء للاداة.
يمكن تثبيت الاداة على Ubuntu من خلال الأمر التالي:
$ sudo apt install timelimit
أو يمكنك تثبيتها على Arch ومشتقاته من خلال الأمر التالي:
$ yay -S timelimit
بعد تثبيت الاداة، يمكنك الان استخدامها بأبسط شكل كما يلي:
$ timelimit -t10 ping google.com
في حال أنك لم تستخدم أي متغيرات اضافية، سيعتمد البرنامج التالي:
- زمن الإيقاف = 15 ثانية
- زمن إيقاف البرنامج = 3600 ثانية
- وقت ارسال اشارة ايقاف اجباري في حال عدم الإستجابة = 120 ثانية
- زمن ارسال اشارة إنهاء اجباري فوري في حال عدم الاستجابة للأمر السابق = 9 ثواني.
لتحديد زمن الإيقاف، يمكنك استخدام المفتاح t كما يلي:
-t10
لتحديد زمن الإيقاف الإجباري يمكنك استخدام المفتاح s كما يلي:
-s5
لتحديد زمن الإيقاف الإجباري الفوري يمكنك استخدام المفتاح S كما يلي:
-S2