سؤال هل يمكنني nohup / screen عملية بدأت بالفعل؟


أفعل بعض الاختبارات التجريبية لبرامج ترحيل البيانات التي تعمل منذ فترة طويلة ، عبر SSH. لنفترض أنني بدأت تشغيل نص برمجي في تمام الساعة الرابعة مساءً ؛ الآن ، الساعة 6 مساءً تدور حولها ، وأنا ألعن نفسي لعدم القيام بهذا كله screen.

هل هناك أي طريقة "بأثر رجعي" nohup عملية ، أو أحتاج إلى ترك جهاز الكمبيوتر الخاص بي على الإنترنت طوال الليل؟ إذا كان من غير الممكن إرفاقه screen إلى/nohup عملية بدأت بالفعل ، فلماذا؟ شيء ما يتعلق بكيفية تفاعل الوالدين / الأطفال؟ (لن أقبل إجابة "لا" لا تتناول على الأقل سؤال "لماذا" - آسف ؛)


247
2018-06-11 22:53


الأصل


لقد رأيت للتو مشاركة مدونة مثيرة للاهتمام حول disown. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the - ojrac


الأجوبة:


إذا كنت تستخدم Bash ، فيمكنك التشغيل disown -h job

تبرأ من

disown [-ar] [-h] [jobspec ...]

بدون خيارات ، تتم إزالة كل jobspec من جدول المهام النشطة.   إذا كان -h يتم إعطاء الخيار ، الوظيفة   لا يتم إزالتها من الجدول ، ولكن   تم تحديدها بحيث لا يتم إرسال SIGHUP إليها   المهمة إذا تلقى shell   تنفس الصعداء حتى. إذا كان jobspec غير موجود ، و   لا -a ولا -r الخيار هو   المقدمة ، يتم استخدام الوظيفة الحالية. إذا   يتم توفير أي jobspec ، و -a   الخيار يعني إزالة أو علامة الكل   وظائف؛ ال -r الخيار دون   حجة jobspec يقيد العملية   لتشغيل الوظائف.


200
2018-06-11 23:03



رائع؛ كنت آمل أن يحدث شيء من هذا القبيل. - ojrac
الحياة يمكن أن تكون غير عادلة. gharper وأنا كانوا ينشرون هذا في نفس الوقت تقريبًا :) - serverhorror
انت بطلي - Thomas Dignan
يتبرأ لا يقتصر على باش. كما أنها في zsh ، ksh93 ، ... - Phil P
لقد وجدت أنه عليك بالفعل استخدام disown %1 إذا كان 1 هو jobspec ، على خلاف fg أو bg حيث تستخدم فقط bg 1  serverwatch.com/tutorials/article.php/3935306/... - mltsy


استعمال reptyr

من README:

reptyr - A tool for "re-ptying" programs.
-----------------------------------------

reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.

USAGE
-----

  reptyr PID

"reptyr PID" will grab the process with id PID and attach it to your
current terminal.

After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)

عدد قليل من بلوق وظائف من قبل مؤلفه:


77
2018-05-22 21:27



سوف ألتزم بأدوات مدمجة (بمعنى أنها مرفوضة) ، لكنها ليست مرنة بقدر ما هي إعادةية. +1 - ojrac


لسرقة عملية من tty إلى tty الحالي ، قد ترغب في تجربة هذا الاختراق:

http://www.ucc.asn.au/~dagobah/things/grab.c

يحتاج إلى بعض إعادة التنسيق من أجل تجميع إصدارات Linux / glibc الحالية ، ولكنه لا يزال يعمل.


22
2018-06-12 05:38



باردة بشكل استثنائي. - ojrac


عند بدء العملية ، يتم توصيل STDIN و STDOUT و STDERR شيئا ما. عموما لا يمكنك تغيير ذلك بمجرد بدء الأمر. في الحالة التي تصفها ، من المحتمل أن تكون tty مرتبطة بجلسة ssh. nohup الى حد كبير لا مجرد ...

command < /dev/null > nohup.out 2>&1

أي ، تعيين STDIN إلى / dev / null ، STDOUT إلى ملف و STDERR إلى STDOUT. تقوم الشاشة بأشياء أكثر تعقيدًا تتضمن إعداد ttys توجّه إلى نفسها.

أنا لا أعرف بأي طريقة ل nohup بأثر رجعي أو عرض عملية تشغيل. إذا قمت بالضغط على / proc / $ pid / fd وترى ما هي النقاط 0 و 1 و 2.

قد يكون لديك بعض الحظ في التبرؤ ، ولكن ليس إذا حاولت العملية القيام بأي شيء باستخدام STDIN أو STDOUT أو STDERR.


16
2018-06-11 23:04



+1 للتعليقات الجيدة. st (din | out | err) هو النصف الآخر من المشكلة ، وأنا أقدر النصيحة حول من أين أبدأ بالنظر ، في المرة القادمة أنا في هذا المربى. - ojrac
يمكنك في الواقع تغييره على معظم برامج Unixes. الإختراق مثير للاشمئزاز أحبه. :) ما تفعله هو الاتصال بالعملية باستخدام debug support مثل ptrace ، ثم فرض العملية لاستدعاء dup2 () لإعادة الاتصال 0،1،2 إلى filehandle آخر. - Zan Lynx
نعم ، يمكنك تغييرها. ينطوي على الإيقاف المؤقت للعملية (SIGSTOP) ، وتعديل واصفات الملفات للأرقام 0 ، 1 ، 2 ، ثم إعادة التشغيل (SIGCONT). - Michael Martinez


Cryopid هو تطور إضافي من مؤلف grab.c الذي يقوم بتجميد عملية إلى ملف ، والتي تقوم بتشغيلها (داخل الشاشة) لاستئناف العملية.


12
2018-06-14 18:26



لطيف! حاولت استخدام cryopid في رسالة الماجستير حول الهجرة العملية ، لكنها فشلت في العمل طوال الوقت ، بغض النظر عن ما فعلته. في النهاية ، اضطررت إلى استخدام Dynkpt مع إصدار قديم من Linux. هل ربما تشارك في تطوير cryopid؟ أرى أن اسمك مشابه لنطاق المؤلف. - Juliano
أنا لا أشارك في التطوير ، أعرف فقط المؤلف من الجامعة. ليس لديه الوقت للحفاظ على البيروب في الوقت الحالي ، لذلك يبدو أن بعض الناس بدأوا العمل عليه في sharesource.org/project/cryopid - TRS-80


لا يسعني إلا أن أعطيك مجرد "لا" دون سبب جزء الشاشة ، سأكون مهتما في سبب نفسي أنت.

ومع ذلك هل حاولت disown (باش مدمج)

~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
     By default, removes each JOBSPEC argument from the table of active jobs.
    If the -h option is given, the job is not removed from the table, but is
    marked so that SIGHUP is not sent to the job if the shell receives a
    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
    jobs from the job table; the -r option means to remove only running jobs.

11
2018-06-11 23:02





nohup على سولاريس / OpenSolaris لديه العلم -p إلى nohup عملية التشغيل - على سبيل المثال ، راجع سولاريس 10 nohup الصفحة رجل.


9
2018-06-13 00:59





لقد رأيت مؤخرًا رابطًا إلى neercsوهي أداة شبيهة بالشاشة مبنية باستخدام libcaca ، مكتبة اللون ascii-art. من بين الميزات الأخرى ، فإنه يتميز بالقدرة على الاستيلاء على عملية موجودة وإعادة الوالدين داخل جلسة العمل الخاصة بك (الشاشة).

ومع ذلك ، لم أستخدمه ، لذا لا يمكنني التعليق على ما إذا كان يعمل أم لا.


5
2018-06-14 21:03