I Linux, når du kører en proces, der har brug for lang tid at løbe, kan det være en smerte at afslutte det halvvejs, fordi du er ude af tid, eller fordi du skal hjem. Hvis du nogensinde har stødt på en sådan situation før, så har du virkelig brug for at få Reptyr-værktøjet.

Hvad er Reptyr?

Reptyr-værktøjet er et kommandolinjeværktøj, der tager en løbende proces fra en terminal og overfører den til en anden. Det gentager med andre ord en proces. Navnet minder også om en pseudoterminal - ofte forkortet som "PTY". En pseudoterminal, hvis du ikke vidste det, er et værktøj, der lader to processer (en mester og en slave) være forbundet med hinanden. Det, du skriver på en, afspejles i det andet.

Hvordan virker Reptyr arbejde?

Med Reptyr kan du starte en proces på arbejde og afslutte den hjemme (hvis du bruger SSH). Der er andre værktøjer, der ligner Reptyr-værktøjet, som Screenify og Retty, og du har måske stødt på dem før. Reptry har imidlertid vist sig at være bedre end sine konkurrenter i øjeblikket. Det har færre fejl og er langt mere effektivt. Problemet med disse andre værktøjer er, at processernes styringsterminal ikke ændres, selvom processen bliver migreret. Hvis du f.eks. Bruger Screenify, og du forsøger at bruge kommandoen "^ c" eller "^ z" på den nye terminal, fungerer de ikke korrekt. Dette skyldes, at de udføres på terminalen, som har kontrol i øjeblikket. Hvis du ændrer et programvindue eller prøver kommandoen " less ", fungerer det heller ikke korrekt, da Linux er narret til at tro, at du stadig arbejder på den gamle terminal.

Så hvordan virker Reptyr nøjagtigt? Det målretter den proces, vi søger at migrere ved hjælp af ptrace API, åbner en ny terminal og bruger "dup2" til at overskrive de gamle filbeskrivere. Reptyr er også forskellig fra andre processer, idet det ændrer den kontrollerende terminal. Du kan tjekke den officielle blog for at få detaljerne, men det involverer grundlæggende manipulation af ioctl, TIOCSCTTY-funktionen i Linux for at ændre kontrolprocessen.

Installation

I en Ubuntu-baseret distro kan du bruge apt-get til at installere programmet:

 sudo apt-get installere reptyr 

Flytning af en proces til en ny skærm med Reptyr

Du kan også bruge Reptyr sammen med programmet GNU Screen Software (eller et lignende terminalmultiplexorprogram) til at flytte din proces til en ny skærm session. Hvis du for eksempel har en kørende proces og skal genstarte din server, kan du overføre den til en ny skærm session, så du kan få adgang til den igen, når et system genstartes. Det lyder nyttigt, ikke? Så hvordan gør du det præcist?

For det første skal du suspendere den proces, du skal overføre. Det kan gøres på forskellige måder - det hele afhænger af processen du kører (for det meste fungerer "^ z"). Derefter skal du genoptage processen i baggrunden, efter at du har suspenderet den. Kommandoen til dette, som du ikke vidste, er,

 bg 

Dernæst skal du isolere børneprocessen fra forældreprocessen. Dette skyldes, at forældelsesprocessen afsluttes under genstart, og du behøver at holde det i gang med børneprocessen. For at gøre det skal du bruge disown kommandoen:

 disown name_of_process 

Derefter skal du starte skærmprogrammet. Det er faktisk et smukt praktisk værktøj - det er nemt at downloade, hvis du ikke har det. Du starter det med følgende kommando:

 skærm 

Og nu skal du hente den proces, du forsøger at overføre. Bemærk venligst, at du har brug for PID for køringsprocessen for denne kommando. Alternativt kan du bruge kommandoen " pgrep ". Hvis du kender PID, skal du skrive:

 reptyr PID 

Hvis du ikke kender PID:

 reptyr $ (pgrep name_of_process) 

Og du er færdig! Du kan nu logge ud fra din session uden at dræbe processen.

Sæt hætten

 $ ctrl + z # Afbryd den nuværende proces $ disown  # Afslut processen fra shell $ screen # Startskærm $ reptyr $ (pgrep irssi) # Få tilbage processen 

Reptyr er åben kilde og helt gratis. Det er nemt at installere og bruge, så gør det og prøv det. Er sikker på at du finder det ret praktisk.

Billedkredit: Techiezone, Mtellin @ Flickr