Vraag Kan ik een reeds gestart proces weergeven / screenen?


Ik doe wat test-runs van langlopende data migratie scripts, over SSH. Laten we zeggen dat ik rond vier uur 's middags een script begin; nu rolt er zes uur 's middags rond en ik vervloek mezelf omdat ik dit niet allemaal heb gedaan screen.

Is er een manier om "met terugwerkende kracht" nohup een proces, of moet ik mijn computer de hele nacht online laten staan? Als het niet mogelijk is om te hechten screen naar/nohup een proces dat ik al gestart ben, waarom dan? Heeft er iets te maken met hoe interactie tussen ouder en kind verloopt? (Ik accepteer geen "nee" antwoord dat niet op zijn minst de vraag 'waarom' aanpakt - sorry;))


247
2018-06-11 22:53


oorsprong


Zag net een interessante blogpost over disown. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the - ojrac


antwoorden:


Als u Bash gebruikt, kunt u uitvoeren disown -h job

verloochenen

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

Zonder opties wordt elke jobspec verwijderd uit de tabel met actieve taken.   Als het -h optie wordt gegeven, de baan   wordt niet uit de tabel verwijderd, maar wel   gemarkeerd zodat SIGHUP niet wordt verzonden naar   de taak als de shell een ontvangt   SIGHUP. Als jobspec niet aanwezig is, en   noch de -a noch -r optie is   geleverd, wordt de huidige taak gebruikt. Als   er wordt geen jobspec geleverd, de -a   optie betekent om alles te verwijderen of te markeren   banen; de -r optie zonder een   jobspec-argument beperkt de bewerking   naar lopende banen.


200
2018-06-11 23:03



Geweldig; Ik hoopte dat zoiets zou opduiken. - ojrac
Het leven kan oneerlijk zijn. Gharper en ik publiceerden dit ongeveer tegelijkertijd :) - serverhorror
U bent mijn held - Thomas Dignan
disown is niet specifiek voor bash. Het zit ook in zsh, ksh93, ... - Phil P
Ik vond dat je het echt moest gebruiken disown %1 als 1 de jobspec is, in tegenstelling tot fg of bg, waar je gewoon gebruik van maakt bg 1  serverwatch.com/tutorials/article.php/3935306/... - mltsy


Gebruik reptyr

Van de 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.)

Een paar blogberichten van de auteur:


77
2018-05-22 21:27



Ik blijf bij de ingebouwde tools (d.w.z. disown), maar het is niet zo flexibel als reptyr. 1 - ojrac


Om een ​​proces van één tty naar je huidige tty te stelen, kun je deze hack proberen:

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

Het heeft wat herformattering nodig om te compileren naar de huidige Linux / glibc-versies, maar werkt nog steeds.


22
2018-06-12 05:38



Uitzonderlijk cool. - ojrac


Wanneer een proces start, zijn STDIN, STDOUT en STDERR verbonden iets. Over het algemeen kun je dat niet veranderen als de opdracht eenmaal is gestart. In het geval dat je het beschrijft, is dat waarschijnlijk een tty geassocieerd met de ssh-sessie. nohup doet zo ongeveer gewoon ...

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

Dat wil zeggen, zet STDIN op / dev / null, STDOUT op een bestand en STDERR op STDOUT. Scherm doet veel geavanceerdere dingen met betrekking tot het instellen van tty's die naar zichzelf verwijzen.

Ik ken geen manier om met terugwerkende kracht een lopend proces te onthullen of te screenen. Als je cd naar / proc / $ pid / fd en zie wat 0, 1 en 2 verwijzen naar.

Je hebt misschien wat geluk met disown, maar niet als het proces iets probeert te doen met STDIN, STDOUT of STDERR.


16
2018-06-11 23:04



+1 voor de goede reacties. st (din | out | err) is de andere helft van het probleem, en ik waardeer het advies over waar te beginnen met zoeken, de volgende keer dat ik in deze file sta. - ojrac
Je kunt het eigenlijk op de meeste Unixes wijzigen. Het is een walgelijke hack. Ik hou ervan. :) Wat u doet is, maak verbinding met het proces met debug-ondersteuning zoals ptrace en dwing het proces vervolgens om dup2 () te bellen om 0,1,2 opnieuw te verbinden met een andere filehandle. - Zan Lynx
ja, je kunt het veranderen. Betreft het pauzeren van het proces (SIGSTOP) en het wijzigen van de bestandsbeschrijvingen voor fd 0, 1, 2. Dan opnieuw opstarten (SIGCONT). - Michael Martinez


Cryopid is een verdere ontwikkeling van de auteur van grab.c die een proces bevriest naar een bestand, dat je vervolgens uitvoert (binnen het scherm) om het proces te hervatten.


12
2018-06-14 18:26



Leuk! Ik probeerde cryopid te gebruiken in mijn masterproef over procesmigratie, maar het werkte niet altijd, ongeacht wat ik deed. Uiteindelijk moest ik dynckpt gebruiken met een oude versie van Linux. Ben je misschien betrokken bij de ontwikkeling van cryopid? Ik zie dat je naam lijkt op het domein van de auteur. - Juliano
Ik ben niet betrokken bij de ontwikkeling, ik ken de auteur van de universiteit. Hij heeft op dit moment niet de tijd om cryopid te onderhouden, dus het lijkt erop dat sommige mensen eraan begonnen te werken sharesource.org/project/cryopid - TRS-80


Ik kan je alleen een eenvoudig "Nee" geven zonder het waarom voor het schermgedeelte, ik zou geïnteresseerd zijn in de reden waarom ikzelf.

Heb je het echter geprobeerd? disown (een bash ingebouwd)

~ $ 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 op Solaris / OpenSolaris heeft een markering -p om een ​​lopend proces op te heffen - zie bijvoorbeeld de Solaris 10 nohup man-pagina.


9
2018-06-13 00:59





Ik zag onlangs een link naar neercs, een schermachtig hulpprogramma gebouwd met libcaca, een ascii-art-bibliotheek met kleuren. Het biedt onder meer de mogelijkheid om een ​​bestaand proces te pakken en het opnieuw op te vragen in uw neercs (scherm) sessie.

Ik heb het echter nog niet gebruikt, dus ik kan niet zeggen of het werkt of niet.


5
2018-06-14 21:03