سؤال

كيف يمكنني إرفاق "عرض وحدة التحكم / المحطة الطرفية إلى تطبيقات تطبيقات حتى أتمكن من رؤية ما قد يقوله؟

كيف يمكنني فصل إخراج التطبيقات دون قتل التطبيق؟

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

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

المحلول

هناك بعض الخيارات هنا. واحد هو إعادة توجيه إخراج الأمر إلى ملف، ثم استخدم "الذيل" لعرض خطوط جديدة تضاف إلى هذا الملف في الوقت الفعلي.

خيار آخر هو إطلاق البرنامج الداخلي داخل "الشاشة"، وهو نوع من تطبيق محطة بنص النص. يمكن إرفاق جلسات الشاشة وفصلها، ولكنها تعني بشكل اسمي استخدامها إلا من قبل المستخدم نفسه، لذلك إذا كنت ترغب في مشاركةها بين المستخدمين، فهذا ألم كبير في الحمار.

نصائح أخرى

أعتقد أن لدي حل أبسط هنا. فقط ابحث عن دليل يتوافق اسمه مع PID الذي تبحث عنه، في ظل نظام الملفات الزائفة القابلة للوصول إلى /proc طريق. لذلك إذا كان لديك برنامج يعمل، فإن معرفه هو 1199، cd بداخله:

$ cd /proc/1199

ثم ابحث عن fd الدليل تحت

$ cd fd

هذه fd تمتلك الدليل كائنات بيانات الملفات التي يستخدمها برنامجك (0: stdin، 1: stdout، 2: stderr) tail -f الشخص الذي تحتاجه - في هذه الحالة، Stdout):

$ tail -f 1

كنت أبحث عن هذا الشيء نفسه بالضبط ووجدت أنه يمكنك القيام به:

strace -ewrite -p $PID

ليس بالضبط ما تحتاجه، لكنه قريب جدا.

حاولت إخراج إعادة التوجيه، لكن هذا لم ينجح بالنسبة لي. ربما لأن العملية كانت تكتب إلى مقبس، لا أعرف.

كيف يمكنني إرفاق "عرض وحدة التحكم / المحطة الطرفية إلى تطبيقات تطبيقات حتى أتمكن من رؤية ما قد يقوله؟

حول هذا السؤال، أعرف أنه من الممكن التقاط الإخراج، حتى عندما لا تقوم بتشغيل أمر SCEEN قبل تشغيل المعالج.

بينما لم أحاول ذلك أبدا، فقد وجدت مقالة مثيرة للاهتمام تشرح كيفية القيام باستخدام GDB (ودون إعادة تشغيل عمليةك).

إعادة توجيه الإخراج من عملية التشغيل

في الأساس:

  1. تحقق من قائمة الملفات المفتوحة لعمليتك، وذلك بفضل / بروك / xxx / fd
  2. يربط عملتك مع GDB
  3. في حين توقف مؤقتا، أغلق الملف الذي تهتم به، اتصل قريب() وظيفة (يمكنك أي وظيفة لعمليتك في GDB. أظن أنك بحاجة إلى رموز تصحيح الأخطاء في عمليةك ..)
  4. افتح ملف جديد استدعاء يزيد() أو فتح () وظيفة. (إلقاء نظرة على التعليقات في النهاية، سترى أن الناس يشيرون إلى استخدام DUP2 () لضمان نفس المقبض سيكون قيد الاستخدام)
  5. فصل العملية واسمحوا في التشغيل.

بالمناسبة، إذا كنت تقوم بتشغيل نظام التشغيل Linux على مربع i386، فإن التعليقات تتحدث عن أداة أفضل لإعادة توجيه الإخراج إلى وحدة تحكم جديدة: "ريبتك" وبعد إذا كان الأمر كذلك، فاعتبر استخدامها.

كنت أرغب في مشاهدة عملية ترقية Yum التي تم تشغيلها محليا، لذلك في حين كانت هناك طرق أكثر كفاءة للقيام بذلك، إليك ما فعلته:

watch cat /dev/vcsa1

من الواضح أنك تريد استخدام VCSA2، VCSA3، إلخ، اعتمادا على المحطة التي يتم استخدامها.

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

بالنسبة لي، هذا عملت:

  1. تسجيل الدخول باسم صاحب العملية (حتى root تم رفض إذن)

    ~$ su - process_owner
    
  2. ذيل واصف الملف كما هو مذكور في العديد من الإجابات الأخرى.

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top