كيف يمكنني لف قابلة للتنفيذ على UNIX (SUNOS) بحيث لا يتم تشغيلها أبدًا أكثر من مرة في نفس الوقت؟

StackOverflow https://stackoverflow.com/questions/2768981

سؤال

لديّ قابلة للتنفيذ (لا يوجد مصدر) أحتاج إلى التفاف ، للتأكد من أنه لا يطلق عليه أكثر من مرة في وقت واحد. أفكر على الفور في نوع من غلاف قائمة الانتظار ، لكن كيف يمكنني فعله فعليًا بحيث يتم استدعاء الغلاف الخاص بي بدلاً من القابل للتنفيذ نفسه؟ هل هناك طريقة أفضل للقيام بذلك؟ يجب أن يكون الحل غير مرئي لأن المستخدمين هم تطبيقات أخرى. يتم تقدير أي معلومات/توصيات.

هل كانت مفيدة؟

المحلول

الطريقة 1: ضع القابل للتنفيذ في موقع ما وليس في المسار القياسي. قم بإنشاء برنامج نصي Shell الذي يتحقق من ملف Sentinel ، وإذا كان ملف Sentinel غائبًا ، ينفذ البرنامج ، وينتظر إكمال PTogram ، ثم يحذف ملف Sentinel. إذا كان ملف Sentinel موجودًا ، فسيقوم البرنامج النصي بإدخال حلقة بتأخير قصير (ثانية واحدة؟ ما هي مدة التنفيذ القياسي لهذا البرنامج؟

الطريقة 2: قم بإنشاء برنامج منفصل يقوم بنفس الشيء مثل البرنامج النصي ، ولكن باستخدام إشارة أو قفل على مستوى النظام بدلاً من ذلك. يمكنك حتى استخدام قفل القراءة/الكتابة على ملف. سيقوم البرنامج بعمل شوكة () و exec () في البرنامج الحقيقي ، في انتظار خروج الأطفال قبل مسح الحارس.

نصائح أخرى

إذا كان المستخدمون تطبيقات أخرى ، فيمكنك فقط إعادة تسمية القابلة للتنفيذ (على سبيل المثال الاسم -> name.real) والاتصال باللف مع الاسم الأصلي. للتأكد من أنه لا يتم استدعاؤه إلا مرة واحدة في كل مرة ، يمكنك استخدام pidof الأمر (على سبيل المثال pidof name.real) للتحقق مما إذا كان البرنامج يعمل بالفعل (pidof في الواقع يمنحك pid من عملية التشغيل ، بحيث يمكنك استخدام أشياء مثل kill أو أي شيء لإرسال إشارات إليها).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top