שאלה האם אני יכול לבצע nohup / המסך תהליך שכבר התחיל?


אני עושה כמה בדיקות של ריצה לטווח ארוך העברת נתונים סקריפטים, על SSH. נניח שאני מתחיל להפעיל סקריפט בסביבות ארבע אחר הצהריים; עכשיו, 18:00 מתגלגל, ואני מקלל את עצמי על זה לא עושה את כל זה פנימה screen.

האם יש דרך "רטרואקטיבית" nohup תהליך, או שאני צריך לעזוב את המחשב שלי באינטרנט כל הלילה? אם לא ניתן לצרף screen ל/nohup תהליך שכבר התחלתי, אז למה? משהו שקשור לאיך אינטראקציה בין הורה לילד? (אני לא מקבל תשובה "לא" כי לא לפחות להתייחס לשאלה של "למה" - מצטער;))


247
2018-06-11 22:53




רק ראיתי לכתוב בלוג מעניין disown. בלוגים.דברים - ojrac


תשובות:


אם אתה משתמש ב- Bash, אתה יכול לרוץ disown -h job

להתכחש

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

ללא אפשרויות, כל אחד מהפריטים מוסר מטבלת העבודות הפעילות.   אם -h ניתנת אפשרות, את העבודה   לא יוסר מהטבלה, אבל הוא   מסומן כך SIGHUP לא נשלח   את העבודה אם פגז מקבל   SIGHUP. אם ספק העבודה אינו קיים, ו   לא -a ולא -r אופציה   מסופק, העבודה הנוכחית משמש. אם   לא מסופק -a   אפשרות פירושו להסיר או לסמן הכל   מקומות תעסוקה; ה -r אפשרות ללא   הטענה   לעבודות ריצה.


200
2018-06-11 23:03



מדהים; קיוויתי שמשהו כזה יופיע. - ojrac
החיים יכולים להיות לא הוגנים. gharper ואני היו פרסום זה בערך באותו זמן :) - serverhorror
אתה הגיבור שלי - Thomas Dignan
disown אינו ספציפי כדי bash. זה גם ב- zsh, ksh93, ... - Phil P
מצאתי כי אתה באמת צריך להשתמש disown %1 אם 1 הוא jobec, בניגוד fg או BG שבו אתה פשוט להשתמש bg 1  serverwatch.com/tutorials/article.php/3935306/... - mltsy


להשתמש רפטיר

מתוך 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



אני הולך להישאר עם כלים מובנים (כלומר disown), אבל זה לא גמיש כמו rptyr. +1 - ojrac


כדי לגנוב תהליך מ tty אחד ל tty הנוכחי שלך, ייתכן שתרצה לנסות את זה גרזן:

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

זה צריך כמה עיצוב מחדש כדי לקמפל הנוכחי לינוקס / גליבק גרסאות, אבל עדיין עובד.


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 או לסנן את תהליך ריצה. אם אתה cd / proc / $ pid / fd ולראות מה 0, 1 ו 2 הצבע.

ייתכן שיהיה קצת מזל עם disown, אבל לא אם התהליך מנסה לעשות משהו עם STDIN, STDOUT או STDERR.


16
2018-06-11 23:04



+1 לתגובות הטובות. st (din | out) err) הוא החצי השני של הבעיה, ואני מעריך את העצה היכן להתחיל לחפש, בפעם הבאה אני בתוך זה ריבה. - ojrac
אתה בעצם יכול לשנות את זה על רוב יוניקס. זה גרזן מגעיל. אני אוהב את זה. :) מה שאתה עושה זה, להתחבר לתהליך באמצעות debug תמיכה כמו ptrace, ולאחר מכן לכפות את התהליך כדי להתקשר dup2 () כדי לחבר מחדש 0,1,2 כדי filehandle אחר. - Zan Lynx
כן, אתה יכול לשנות את זה. כולל השהיה של התהליך (SIGSTOP), ושינוי מתארי הקבצים עבור fd 0, 1, 2. לאחר מכן הפעלה מחדש (SIGCONT). - Michael Martinez


קריופיד הוא פיתוח נוסף של המחבר של grab.c כי קופא תהליך לקובץ, אשר לאחר מכן להפעיל (בתוך המסך) כדי לחדש את התהליך.


12
2018-06-14 18:26



נחמד! ניסיתי להשתמש cryopid בעבודת המאסטר שלי על הגירה תהליך, אבל זה לא עובד כל הזמן, לא משנה מה עשיתי. בסופו של דבר, הייתי צריך להשתמש dynkpt עם גרסה עתיקה של לינוקס. אתה אולי מעורב בפיתוח של cryopid? אני רואה את השם שלך דומה לתחום של המחבר. - Juliano
אני לא מעורב בפיתוח, אני רק מכיר את המחבר מהאוניברסיטה. אין לו זמן לשמור על קריופיד כרגע, אז זה נראה כאילו כמה אנשים התחילו לעבוד על זה ב מקורותource.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 על Solaris / OpenSolaris יש דגל ל nohup תהליך ריצה - למשל, לראות את דף הבית של.


9
2018-06-13 00:59





לאחרונה ראיתי קישור אל neercs, שהוא כלי כמו המסך נבנה באמצעות libcaca, צבע ascii-art הספרייה. בין שאר התכונות, הוא מתגאה ביכולת לתפוס תהליך קיים ולהפוך אותו מחדש בתוך הפגישה שלך (המסך) neercs.

אני לא השתמשתי בו עם זאת, אז אני לא יכול להגיב על אם זה עובד או לא.


5
2018-06-14 21:03