Reptyr - Bevegelsesprosesser til en annen skjermskall [Linux]
På Linux, mens du kjører en prosess som trenger lang tid å løpe, kan det være vondt å avslutte det halvveis fordi du er ute av tid, eller fordi du trenger å komme hjem. Hvis du noen gang har møtt en slik situasjon før, må du virkelig få Reptyr-verktøyet.
Hva er Reptyr?
Reptyr-verktøyet er et kommandolinjeverktøy som tar en løpende prosess fra en terminal og overfører den til en annen. Med andre ord gjentar det en prosess. Navnet påminner også om en pseudoterminal - ofte forkortet som "PTY". En pseudoterminal, hvis du ikke visste, er et verktøy som lar to prosesser (en mester og slave) knyttes til hverandre. Det du skriver på en, reflekteres i den andre.
Hvordan virker Reptyr?
Med Reptyr kan du starte en prosess på jobben og fullføre den hjemme (hvis du bruker SSH). Det finnes andre verktøy som ligner Reptyr-verktøyet, som Screenify og Retty, og du har kanskje møtt dem før. Imidlertid har Reptry vist seg å være bedre enn konkurrentene for øyeblikket. Den har færre feil og er langt mer effektiv. Problemet med disse andre verktøyene er at prosessorens kontrollterminal ikke endres selv når prosessen blir migrert. Hvis du for eksempel bruker Screenify, og du prøver å bruke kommandoene "^ c" eller "^ z" på den nye terminalen, virker de ikke riktig. Dette skyldes at de blir henrettet på terminalen som har kontrollen for øyeblikket. Hvis du endrer størrelsen på et programvindu eller prøver " less
" -kommandoen, virker det heller ikke riktig, da Linux er lurt til å tenke at du fortsatt opererer på den gamle terminalen.
Så hvordan fungerer Reptyr nøyaktig? Den retter seg mot prosessen vi ønsker å migrere ved hjelp av ptrace API, åpner en ny terminal og bruker "dup2" for å overskrive de gamle filbeskrivelsene. Reptyr er også forskjellig fra andre prosesser ved at det endrer kontrollterminalen. Du kan sjekke den offisielle bloggen for å få detaljer, men det innebærer i utgangspunktet å manipulere ioctl, TIOCSCTTY-funksjonen i Linux for å endre kontrollprosessen.
Installasjon
I en Ubuntu-basert distro kan du bruke apt-get å installere programmet:
sudo apt-get installere reptyr
Flytte en prosess til en ny skjerm med Reptyr
Du kan også bruke Reptyr sammen med GNU Screen-programvaren (eller et lignende terminalmultiplikatorprogram) for å flytte prosessen til en ny skjermøkt. Hvis du for eksempel har en løpende prosess og trenger å starte datamaskinen på nytt, kan du overføre den til en ny skjermsesjon slik at du får tilgang til den igjen etter at systemet har startet på nytt. Høres nyttig ut, ikke sant? Så hvordan gjør du det akkurat?
Først må du avbryte prosessen som du må overføre. Det kan gjøres på forskjellige måter - alt avhenger av prosessen du kjører (det meste fungerer "^ z"). Så, etter at du har suspendert den, må du gjenoppta prosessen i bakgrunnen. Kommandoen for dette, er du ikke visst, er,
bg
Deretter må du isolere barnprosessen fra foreldreprosessen. Dette skyldes at foreldreprosessen blir avsluttet under omstart, og du må fortsette det med barneprosessen. For å gjøre det, bruk disown-kommandoen:
disown name_of_process
Deretter må du starte skjermprogrammet. Det er faktisk et ganske praktisk verktøy - det er enkelt å laste ned, hvis du ikke har det. Du starter den med følgende kommando:
skjerm
Og nå må du hente prosessen du prøver å migrere. Vær oppmerksom på at du trenger PID for løpeprosessen for denne kommandoen. Alternativt kan du bruke kommandoen " pgrep
". Hvis du kjenner PID, skriver du:
reptyr PID
Hvis du ikke kjenner PID:
reptyr $ (pgrep name_of_process)
Og du er ferdig! Du kan nå logge deg ut fra økten din uten å drepe prosessen.
oppsummering
$ ctrl + z # Stopp gjeldende prosess $ disown# Ta av prosessen fra shell $ skjermen # Start skjerm $ reptyr $ (pgrep irssi) # Få tilbake prosessen
Reptyr er åpen kildekode og helt gratis. Det er enkelt å sette opp og bruke, så gjør det igjen og prøv. Er sikker på at du finner det ganske nyttig.
Bildetekst: Techiezone, Mtellin @ Flickr