سؤال

أنا غير متأكد من استخدام pty.fork() أو os.fork() عند إنتاج عمليات الخلفية الخارجية من تطبيقي.(مثل محركات الشطرنج)

أريد أن تموت العمليات التي تم إنتاجها في حالة مقتل الأصل، كما هو الحال مع تطبيقات الإنتاج في الجهاز الطرفي.

ما هي الصعود والهبوط بين الشوكتين؟

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

المحلول

عملية الطفل التي تم إنشاؤها مع os.fork() يرث Stdin / Stdout / Stderr من العملية الأصل، في حين أن الطفل الذي تم إنشاؤه pty.fork() متصل بمحطة زائفة جديدة. تحتاج في وقت لاحق عند كتابة برنامج مثل xterm: pty.fork() في العملية الأصل إرجاع واصف للتحكم في محطة عملية الأطفال، بحيث يمكنك تمثيل البيانات بصريا من تكنولوجيا المعلومات وترجمة إجراءات المستخدم إلى تسلسل إدخال المحطة الطرفية.

تحديث:

من صفحة (7)

يمكن أن تفتح عملية تتوقع أن تكون متصلا بمحطة الطرفية في نهاية الرقيق للمحطة الزائفة ثم يقودها البرنامج الذي فتح النهاية الرئيسية. يتم توفير أي شيء مكتوب على الطرف الرئيسي للعملية على نهاية الرقيق كما لو كان إدخال مكتوب على المحطة. على سبيل المثال، كتابة حرف المقاطعة (عادة التحكم-ج) إلى الجهاز الرئيسي سيؤدي إلى إنشاء إشارة المقاطعة (Sigint) لجماعة العمليات المقدمة المتصلة بالعبد. وعلى العكس من ذلك، يمكن قراءة أي شيء مكتوب إلى نهاية الرقيق للمحطة الزائفة من خلال العملية المتصلة بالإنهاء الرئيسي.

نصائح أخرى

في الماضي كنت أستخدم دائمًا subprocess وحدة لهذا.يوفر واجهة برمجة تطبيقات جيدة للتواصل مع العمليات الفرعية.

يمكنك استخدام call(*popenargs, **kwargs) لمنع تنفيذها، وأعتقد أن استخدام Popen يمكن للفئة التعامل مع التنفيذ غير المتزامن.

تفحص ال مستندات لمزيد من المعلومات.

بقدر استخدام os.fork ضد pty.fork, ، كلاهما يعتمد بشكل كبير على النظام الأساسي، ولن يعمل أي منهما (أو على الأقل يتم اختباره) مع Windows.ال pty يبدو أن الوحدة النمطية هي الأكثر تقييدًا بين الاثنين من خلال قراءة المستندات.والفرق الرئيسي هو الجانب الطرفي الزائف.لذا، إذا لم تكن على استعداد لتصميم التعليمات البرمجية الخاصة بك بطريقة تمكنك من استخدام subprocess الوحدة النمطية، ربما سأختارها os.fork بدلاً من pty.fork.

السخرية ضرورية لبعض التطبيقات التي تتوقع حقا محطة. قذيفة تفاعلية هي واحدة من هذه الأمثلة ولكن هناك الكثير من الآخر. الخيار PTY.Fork ليس هناك كأنظمة OS.Fork أخرى ولكن كوسيلة واجهة برمجة تطبيقية محددة لاستخدامها.

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