كيف يمكنني حفظ مورد عملية من proc_open من أجل التحقق من الحالة لاحقا؟

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

سؤال

أنا أقوم بتشغيل sh النصي التي تعمل أ جاوة عملية من خلال بي أتش بي على أوبونتو الخادم. أنا أستخدم proc_open لتشغيل العملية. عادة ما يذهب سير العمل مثل:

  • طلب صفحة ->
  • يعمل البرنامج النصي (حتى انتهى) ->
  • صفحة النتائج.

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

نوع المورد هو "عملية"، لقد استخدمت هذه الوظيفة get_resource_type. للحصول عليه.

لن يعمل Serialize في هذه الحالة - الموارد هي استثنائية لذلك (يمكنك أن تنظر إليها http://il2.php.net/manual/en/function.serialize.php. داخل مربع المعلمات).

هدفي هو معالجة عملية جيدة. هل يعرف شخص ما كيف يمكنني استخدام المورد أو أي طريقة أخرى ستفعل من أجل معالجة العملية.

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

المحلول

لا يمكنك تخزين أنواع الموارد للاستخدام لاحقا في PHP. ما عليك القيام به هو تطبيق شكل من أشكال الاتصال غير المتزامن - ربما ملف، حيث يكتب المرء معلومات الحالة والآخر يقرأ، ذاكرة مشتركة، أنبوب مسمى، ...

أود أن أنظر إلى ملحق pcntl. وبعد تلميح: Forking غير ممكن من داخل بيئة خادم الويب لأسباب أمنية.

نصائح أخرى

في حالتي يتم تشغيل البرنامج النصي بالتوازي، لن ينتظر الخادم حتى ينتهي البرنامج النصي (يستغرق الأمر ساعات في بعض الأحيان حتى لا يستطيع) ..

لا ينبغي أن يكون مشكلة بمفردها. يمكنك بسهولة إجراء عملية تشغيل PHP طويلة، طالما لم يتم البدء من خادم ويب. إذا كنت بحاجة إلى بدء العملية من تطبيق ويب، أود أن أقترح عليك إدراج إدخال في جدول قاعدة البيانات، ثم قم بتشغيل برنامج Cronjob نصي، والذي يتحقق من قائمة الانتظار هذه والقيام بالمعالجة.

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