Vraag Is het mogelijk om een ​​proces los te koppelen van zijn terminal? (Of: "Ik had het scherm moeten gebruiken!") [Dupliceren]


Mogelijke duplicaten:
Kan ik een reeds gestart proces weergeven / screenen? 

Op Unix (specifiek Linux), ben ik begonnen aan een baan in een reguliere ssh-> bash-sessie. Ik zou graag snel van mijn werk af gaan, maar ik realiseer me nu dat de klus enkele uren zal duren.

Als ik net met deze taak op het scherm was begonnen, kon ik loskoppelen en naar huis gaan. Maar dat deed ik niet.

Is er een manier om de taak te ontkoppelen van zijn SSH-sessie, zodat ik mijn computer kan afsluiten, (de TCP-verbinding kan laten vallen en de SSH-sessie kan doden) en toch het programma kan blijven gebruiken?

Ik geef niet om de uitvoer - in feite heb ik stdout omgeleid naar een bestand. Ik wil gewoon dat het tot voltooiing komt.


116
2017-07-01 22:16


oorsprong




antwoorden:


U kunt op drukken ctrl-z om het proces te onderbreken en vervolgens uit te voeren bg om het op de achtergrond te laten draaien.

U kunt een genummerde lijst weergeven met alle processen die op deze manier zijn verwerkt jobs.

Dan kun je rennen disown %1 (vervangen 1 met het procesnummer uitgevoerd door jobs) om het proces los te koppelen van de terminal.

Ondanks de naam blijft het proces na het hardlopen nog steeds in uw bezit disown, het wordt gewoon losgemaakt van de terminal waar je het mee begon.

Dit antwoord heeft meer informatie


156
2017-07-01 22:26



Hoe veilig is het om deze procedure te proberen? Elke valstrik? - ndemou


Ik geloof dat het commando dat je zoekt "verlost" is


17
2017-08-19 16:32





Vanuit je bashshell:

control+z

Ga vervolgens door met het uitvoeren van de taak op de achtergrond:

bg

Later kunt u typen jobs  om te zien of uw proces nog loopt.


8
2017-07-01 22:23



Zal het niet gedood worden als ik mijn schelp sluit? - mike
Nee. Nou ja, tenminste niet als je bash hebt. De taak maakt zich los van het PPID van je SSH-sessie en draait nog steeds op de server als je gebruikersnaam. - Joe
De bovenstaande instructies zorgen ervoor dat het proces wordt afgesloten als u de shell sluit. Je moet bovendien het 'disown'-commando / builtin uitvoeren (dit is in bash), waardoor het proces van de shell wordt losgekoppeld en het HUP-signaal niet naar het proces bij afsluiten wordt verzonden. - Mark
Op mijn versie van bash [3.2.25 (1) -release (i686-redhat-linux-gnu)], heb ik het proces getest en hoefde ik de taak niet te verbreken voordat ik de verbinding verbrak. De onderliggende PID is losgekoppeld van de bovenliggende PID en blijft zonder onderbrekingen actief als mijn gebruikersnaam. YMMV, denk ik. - Joe


Tijdens gebruik reptyr in het scherm kunt u het proces (of de uitvoer ervan) naar het scherm verplaatsen.


5
2018-05-16 14:07





Gebruik
nohup commando &

Is mooi:
root @ index: ~ # nohup / usr / bin / curl localhost / begemot.php &
[1] 894
root @ index: ~ # nohup: input negeren en output toevoegen aan `nohup.out '

en verlaat deze terminal, een taak wordt vervolgd ...

5
2018-05-24 09:23





Het gebruik van crtl-Z en vervolgens bg of het gebruik van & bij het uitvoeren van de opdracht is niet 100% betrouwbaar. Het zal in de meeste gevallen werken, maar werkt in sommige gevallen niet zoals verwacht (I / O-gebruik, ...).
Scherm is een betrouwbare oplossing.


4
2017-07-01 22:34



Merk op dat retty (pasky.or.cz/~pasky/dev/retty) is een hulpmiddel waarmee u een proces dat buiten het scherm wordt uitgevoerd naar het scherm kunt verplaatsen. Het kan handig zijn om je werk in een scherm te plaatsen als je het vergeet. Dan kunt u veilig het scherm loskoppelen zonder het risico te lopen om te stoppen. - radius


Ik ben begonnen met het opzetten screen om automatisch uit te voeren wanneer ik verbinding maak met hosts die ik regelmatig gebruik, om dit probleem te voorkomen.

http://tlug.dnho.net/?q=node/239 is een manier om dit te doen, hoewel er andere varianten zijn.

Heeft me een of twee keer gered als ik midden in de sessie een onverwachte onderbreking heb gehad en anders vergeten was te starten screen voordat ik iets langdradigs begon.


4
2017-07-01 22:50





Als u bash gebruikt, kunt u vermoeden met control-Z en achtergrond met bg.

Taakbesturing (van man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

help bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the shell's notion of the current
    job is used.

help banen

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

3
2017-07-01 22:23



Zal het niet worden gedood als ik mijn computer uitschakel, waardoor de SSH-sessie wordt onderbroken en de shell wordt gedood? - mike
Wacht, voert u de opdracht uit op uw lokale computer en gebruikt u SSH voor enige invoer / uitvoer? Of loopt dit op de externe computer? Als de opdracht op de externe computer wordt uitgevoerd, zou u in staat moeten zijn om deze op de achtergrond te gebruiken en de verbinding te verbreken. - Zoredache