På Linux, medan du kör en process som behöver lång tid att springa, kan det vara en smärta att avsluta det halvvägs eftersom du är ute av tid, eller för att du behöver komma hem. Om du någonsin har stött på en sådan situation tidigare måste du verkligen få Reptyr-verktyget.

Vad är Reptyr?

Reptyr-verktyget är ett kommandoradsverktyg som tar en löpande process från en terminal och överför den till en annan. Med andra ord upprepar det en process. Namnet påminner också om en pseudoterminal - ofta förkortad som "PTY". En pseudoterminal, om du inte visste, är ett verktyg som låter två processer (en mästare och slav) kopplas till varandra. Vad du skriver på en återspeglas i den andra.

Hur fungerar Reptyr?

Med Reptyr kan du starta en process på jobbet och avsluta den hemma (om du använder SSH). Det finns andra verktyg som liknar Reptyr-verktyget, som Screenify och Retty, och du kan ha stött på dem tidigare. Reptry har dock visat sig vara bättre än sina konkurrenter just nu. Det har färre buggar och är mycket effektivare. Problemet med dessa andra verktyg är att processornas kontrollterminal inte förändras, även när processen migreras. Om du exempelvis använder Screenify och du försöker använda kommandona "^ c" eller "^ z" på den nya terminalen fungerar de inte korrekt. Detta beror på att de exekveras på terminalen som har kontrollen för tillfället. Om du ändrar ett programfönster eller provar kommandot " less " fungerar det inte heller, eftersom Linux luras på att du fortfarande arbetar på den gamla terminalen.

Så hur fungerar Reptyr exakt? Den riktar sig mot processen vi vill migrera med hjälp av ptrace API, öppnar en ny terminal och använder "dup2" för att skriva över de gamla filbeskrivningarna. Reptyr skiljer sig också från andra processer genom att det ändrar kontrollterminalen. Du kan kolla in den officiella bloggen för att få detaljerna, men det handlar om att manipulera funktionen ioctl, TIOCSCTTY i Linux för att ändra kontrollprocessen.

Installation

I en Ubuntu-baserad distro kan du använda apt-get att installera programmet:

 sudo apt-get installera reptyr 

Flytta en process till en ny skärm med Reptyr

Du kan också använda Reptyr tillsammans med GNU Screen-programvaran (eller ett liknande terminalmultiplikatorprogram) för att flytta din process till en ny skärmupplevelse. Om du till exempel har en körprocess och behöver starta om servern, kan du överföra den till en ny skärmperiod så att du kan komma åt den igen efter en omstart av systemet. Låter bra, eller hur? Så hur gör du det exakt?

Först måste du avbryta processen som du behöver migrera. Det kan göras på olika sätt - det beror helt på processen du kör (mestadels "^ z" fungerar). Sedan måste du återuppta processen i bakgrunden efter att du har stängt den. Kommandot för detta, som du inte visste, är,

 bg 

Därefter måste du isolera barnprocessen från moderprocessen. Detta beror på att föräldraprocessen avslutas under omstart, och du måste behålla det som händer med barnprocessen. För att göra det, använd avkallningskommandot:

 disown name_of_process 

Då måste du starta skärmprogrammet. Det är faktiskt ett ganska användbart verktyg - det är lätt att ladda ner, om du inte har det. Du startar det med följande kommando:

 skärm 

Och nu måste du hämta processen du försöker migrera. Observera att du behöver PID för körprocessen för det här kommandot. Alternativt kan du använda kommandot " pgrep ". Om du vet PID skriver du:

 reptyr PID 

Om du inte känner till PID:

 reptyr $ (pgrep name_of_process) 

Och du är klar! Du kan nu logga ut från din session utan att döda processen.

Recap

 $ ctrl + z # Stäng av den aktuella processen $ disown  # Avlägsna processen från skalet $ screen # Starta skärmen $ reptyr $ (pgrep irssi) # Hämta processen 

Reptyr är öppen källkod och helt gratis. Det är lätt att installera och använda, så gör det och prova. Är säker på att du hittar det ganska praktiskt.

Bildkrediter: Techiezone, Mtellin @ Flickr