كيفية استخدام أمر المهلة على Linux
فاطماواتي أحمد زينوري / Shutterstock.com
حسنًا ، هذا وقت كافٍ لاستخدام الكمبيوتر. يمكنك تحديد حدود زمنية للعمليات ، وتحديد أقصى وقت يمكن تشغيلها فيه باستخدام الأمر timeout
. إليك برنامج تعليمي لوضع قيود على تشغيل البرامج باستخدام هذا الأمر.
ماذا تفعل Timeout بالنسبة لك؟
ال timeout
الأمر يسمح لك ضع حدًا لطول الوقت سيتم تشغيل البرنامج لـ. ولكن لماذا تريد أن تفعل ذلك؟
إحدى الحالات هي عندما تعرف بالضبط المدة التي تريد تشغيل العملية خلالها. حالة الاستخدام الشائعة هي أن يكون لديك timeout
التحكم في برنامج التسجيل أو التقاط البيانات بحيث لا تلتهم ملفات السجل بلا هوادة مساحة محرك الأقراص الثابتة.
هناك حالة أخرى عندما لا تعرف المدة التي تريد أن تستمر العملية فيها ، لكنك تعلم أنك لا تريدها أن تستمر إلى أجل غير مسمى. قد تكون معتادًا على تشغيل العمليات وتقليل نافذة المحطة الطرفية ونسيانها.
يمكن لبعض البرامج - حتى الأدوات المساعدة البسيطة - إنشاء حركة مرور على الشبكة بمستويات يمكن أن تعرقل أداء الشبكة. أو يمكنهم ربط الموارد على جهاز مستهدف ، مما يؤدي إلى إبطاء أدائه. (ping
، أنا أنظر إليك.) ترك هذه الأنواع من البرامج قيد التشغيل لفترات طويلة أثناء تواجدك بعيدًا عن الكمبيوتر يعد ممارسة سيئة.
timeout
جزء من غنو كور Utils لذا لينكس و يونكس مثل جميع أنظمة التشغيل مثل macOS بها مهلة مضمنة فيها. لا يوجد شيء لتثبيته ؛ يمكنك استخدامه فور إخراجه من الصندوق.
الشروع في العمل مع انتهاء المهلة
إليك مثال بسيط. على سبيل المثال ، مع خيارات سطر الأوامر الافتراضية ، فإن ping
سيتم تشغيل الأمر حتى يتم إيقافه عن طريق الضغط على Ctrl + C. إذا لم تقاطعها ، فستستمر.
timeout
باستخدام ping
، يمكننا التأكد من timeout
لا يتم تشغيله وتشغيله ، مما يؤدي إلى استنفاد النطاق الترددي للشبكة وإزعاج أي جهاز يتعرض لضغوط.
يستخدم هذا الأمر التالي ping
للمهلة ping
. نسمح ب 15 ثانية من وقت التشغيل لـ timeout
.
ping
بعد 15 ثانية timeout
ينهي ping
الجلسة ويتم إرجاعنا إلى موجه سطر الأوامر.
استخدام timeout مع وحدات زمنية أخرى
لاحظ أنه لم يكن علينا إضافة s خلف 15. timeout
يفترض أن القيمة بالثواني. يمكنك إضافة s ، لكنها حقًا لا تحدث فرقًا.
لاستخدام قيمة زمنية تقاس بالدقائق أو الساعات أو الأيام ، أضف m أو h أو d.
لتشغيل برنامج ping لمدة ثلاث دقائق ، استخدم الأمر التالي:
ping
tcpdump
لمدة ثلاث دقائق قبل tcpdump
يتدخل ويوقف tcpdump
حصة.
الحد من التقاط البيانات مع انتهاء المهلة
يمكن أن تنمو بعض ملفات التقاط البيانات بسرعة كبيرة. لمنع مثل هذه الملفات من أن تصبح غير عملية أو حتى مشكلة في الحجم ، حدد مقدار الوقت الذي يُسمح فيه بتشغيل برنامج الالتقاط.
في هذا المثال ، نستخدم tcpdump
، أ التقاط حركة مرور الشبكة أداة. على أجهزة الاختبار التي تم البحث عنها في هذه المقالة ، timeout
تم تثبيته بالفعل في Ubuntu Linux و Fedora Linux. يجب تثبيته على Manjaro Linux و Arch Linux ، باستخدام الأمر التالي:
tcpdump
يمكننا تشغيل tcpdump
لمدة 10 ثوانٍ بخياراتها الافتراضية ، وأعد توجيه إخراجها إلى ملف يسمى capture.txt بالأمر التالي:
tcpdump
الإعلانات
(tcpdump
لديه خياراته الخاصة لحفظ حركة مرور الشبكة التي تم التقاطها في ملف. يعد هذا اختراقًا سريعًا لأننا نناقش ls
، وليس timeout
.)
tcpdump
يبدأ في التقاط حركة مرور الشبكة وننتظر لمدة 10 ثوانٍ. وتأتي 10 ثوانٍ وتذهب و timeout
لا يزال قيد التشغيل ، ولا يزال حجم ملف Capture.txt يتزايد. سيستغرق الأمر Ctrl + C متسرعًا للإيقاف timeout
.
التحقق من حجم ملف capture.txt باستخدام timeout
يوضح أنه نما إلى 209 آلاف في غضون ثوانٍ. كان هذا الملف ينمو بسرعة!
-s
ماذا حدث؟ لماذا لم timeout
توقف tcpdump
؟
الأمر كله يتعلق بالإشارات.
إرسال الإشارة الصحيحة
متى timeout
يريد إيقاف برنامج يرسله إشارة SIGTERM . هذا يطلب من البرنامج إنهاء بأدب. قد تختار بعض البرامج تجاهل إشارة SIGTERM. عندما يحدث ذلك ، نحتاج إلى إخبار -k
أن تكون أكثر قوة بقليل.
يمكننا فعل ذلك بسؤال -k
لإرسال إشارة SIGKILL بدلاً من ذلك.
لا يمكن التقاط إشارة SIGKILL أو حظرها أو تجاهلها - فهي تمر دائمًا. لا تطلب SIGKILL من البرنامج التوقف بأدب. SIGKILL تختبئ بالقرب من الزاوية بساعة توقيت وعلبة.
الإعلاناتيمكننا استخدام timeout
(إشارة) خيار لإخبار dmesg
لإرسال إشارة SIGKILL.
dmesg
هذه المرة ، بمجرد انقضاء 10 ثوانٍ ، timeout
توقف.
السؤال بأدب أولاً
يمكننا أن نطلب dmesg
لمحاولة إيقاف البرنامج باستخدام SIGTERM ، وإرسال SIGKILL فقط إذا لم تعمل SIGTERM.
للقيام بذلك ، نستخدم dmesg
(اقتل بعد) الخيار. ال dmesg
يتطلب الخيار قيمة الوقت كمعامل.
في هذا الأمر ، نطلب timeout
للسماح timeout
قم بتشغيله لمدة 30 ثانية ، ثم قم بإنهائه بإشارة SIGTERM. إذا كان ping
لا يزال قيد التشغيل بعد 40 ثانية ، فهذا يعني أنه تم تجاهل SIGTERM الدبلوماسي و timeout
يجب أن ترسل SIGKILL لإنهاء المهمة.
timeout
هي فائدة يمكن مراقبة رسائل المخزن المؤقت لحلقة kernel وعرضها في نافذة طرفية.
timeout
الإعلانات
timeout
يعمل لمدة 30 ثانية ويتوقف عندما يتلقى إشارة SIGTERM.
نحن نعلم أنه لم يكن SIGKILL هو الذي توقف timeout
لأن SIGKILL يترك دائمًا نعيًا من كلمة واحدة في نافذة المحطة: قتل. هذا لم يحدث في هذه الحالة.
استرداد رمز الخروج من البرنامج
تعيد البرامج حسنة التصرف قيمة إلى الصدفة عندما تنتهي. يُعرف هذا باسم كود الخروج. عادةً ما يتم استخدام هذا لإخبار shell - أو أي عملية أطلقت البرنامج - ما إذا كان البرنامج قد واجه مشاكل أثناء تشغيله.
timeout
يوفر كود الخروج الخاص به ، لكننا قد لا نهتم بذلك. ربما نكون مهتمين أكثر بكود الخروج من العملية التي --preserve-status
يتحكم.
يتيح هذا الأمر -c
تشغيل لمدة خمس ثوان. إنه أمر ping على جهاز كمبيوتر يسمى Nostromo ، وهو موجود على شبكة الاختبار التي تم استخدامها للبحث في هذه المقالة.
ping
يتم تشغيل الأمر لمدة خمس ثوان و timeout
ينهيها. يمكننا بعد ذلك التحقق من كود الخروج باستخدام هذا الأمر:
ping
الإعلانات
رمز الخروج هو 124. هذه هي القيمة echo
يستخدم للإشارة إلى أنه تم إنهاء البرنامج باستخدام SIGTERM. إذا أنهى SIGKILL البرنامج ، فإن كود الخروج هو 137.
إذا قاطعنا البرنامج باستخدام Ctrl + C ، فإن كود الخروج من ping
هو صفر.
ping
ping
إذا انتهى تنفيذ البرنامج قبل ping
ينهيها ، echo
يمكن تمرير كود الخروج من البرنامج إلى الصَدَفة.
ولكي يحدث هذا ، يجب أن يتوقف البرنامج من تلقاء نفسه (بمعنى آخر ، هو كذلك ليس تم إنهاؤه بواسطة ping
) ، ويجب أن نستخدم ping
اختيار.
إذا استخدمنا timeout
(عدد) الخيار بقيمة خمسة timeout
سيطلق خمسة طلبات فقط. إذا قدمنا
ping 192.168.4.28مدة دقيقة واحدة ،
timeout 15 ping 192.168.4.28ستنتهي بالتأكيد من تلقاء نفسها. يمكننا بعد ذلك التحقق من قيمة الخروج باستخدام
timeout 3m ping 192.168.4.28.
sudo pacman -Syu tcpdump
timeout 10 sudo tcpdump > capture.txt
ls -lh capture.txtيكمل طلبات ping الخمسة وينتهي. كود الخروج هو صفر. الإعلانات
للتحقق من أن كود الخروج قادم من
timeout -s SIGKILL 10 sudo tcpdump > capture.txt، دعنا نفرض
timeout -k 40 30 dmseg -wلإنشاء رمز خروج مختلف. إذا حاولنا إرسال طلبات ping إلى عنوان IP غير موجود ،
timeout 5 ping Nostromo.localسوف تفشل مع رمز الخروج خطأ. يمكننا بعد ذلك استخدام
echo $?للتحقق من أن كود الخروج غير صفري.
timeout 5 ping Nostromo.local
echo $?
ال
timeout --preserve-status 1m ping -c 5 Nostromo.localمن الواضح أن الأمر لا يمكن أن يصل إلى الجهاز غير الموجود ، لذلك يبلغ عن الخطأ ويغلق. كود الخروج اثنان. هذا هو كود الخروج
echo $?يستخدم للأخطاء العامة.
وضع القواعد الأساسية
timeout --preserve-status 1m ping -c 5 NotHere.localهو كل شيء عن توفير بعض الحدود لتشغيل البرامج. إذا كان هناك خطر من أن تتخطى ملفات السجل محرك الأقراص الثابتة لديك أو أنك قد تنسى أنك تركت إحدى أدوات الشبكة قيد التشغيل ، فلفها في
echo $?والسماح لجهاز الكمبيوتر الخاص بك بالتنظيم الذاتي.
ذات صلة: أفضل أجهزة كمبيوتر Linux المحمولة للمطورين والمتحمسين
اقرأ التالي- & [رسقوو] ؛ مجلد الكمبيوتر هو 40: كيف أنشأت شركة Xerox Star سطح المكتب
- & [رسقوو] ؛ Cyber Monday 2021: أفضل العروض التقنية
- & [رسقوو] ؛ الدالات مقابل الصيغ في Microsoft Excel: ما الفرق؟
- & [رسقوو] ؛ كيفية البحث عن ملف Spotify 2021 الخاص بك
- & [رسقوو] ؛ Cyber Monday 2021: أفضل عروض Apple
- & [رسقوو] ؛ 5 مواقع ويب يجب على كل مستخدم Linux وضع إشارة مرجعية عليها
استخدم Dave McKay أجهزة الكمبيوتر لأول مرة عندما كان الشريط الورقي المثقوب رائجًا ، وهو يقوم بالبرمجة منذ ذلك الحين. بعد أكثر من 30 عامًا في صناعة تكنولوجيا المعلومات ، أصبح الآن صحفيًا متخصصًا في مجال التكنولوجيا. خلال مسيرته المهنية ، عمل كمبرمج مستقل ، ومدير فريق تطوير برمجيات دولي ، ومدير مشروع خدمات تكنولوجيا المعلومات ، ومؤخراً كمسؤول حماية البيانات. تم نشر كتاباته على موقع howtogeek.com و cloudavvyit.com و itenterpriser.com و opensource.com. ديف هو مبشر لينكس ومدافع مفتوح المصدر.
اقرأ السيرة الذاتية الكاملة