Wissel van terminal met Reptyr
Gepubliceerd: Dinsdag 19 juli 2011
Auteur: Koen Vervloesem
Iedere Linux-beheerder gebruikt wel eens Screen om een programma aan een andere terminal te koppelen. Maar wat als je vergeten bent Screen op te starten? Reptyr komt dan te hulp.
Zelfs de meest verstokte Screen- of Tmux-gebruikers vergeten wel eens een programma in hun favoriete sessiebeheerder op te starten, waardoor ze het programma niet naar een andere terminal kunnen verplaatsen. Maar is dat echt een probleem? Nee, er is een eenvoudige manier om toch nog het programma van de terminal te ontkoppelen: druk op CTRL+Z om het te suspenden, en typ daarna bg in om het in de achtergrond als job uit te voeren. Met het commando jobs krijg je een lijst van jobnummers, en daarna kan je een job van zijn terminal ontkoppelen met het volgende commando (hier voor jobnummer 1):
$ disown %1
Reptyr
Hierna kun je dus tenminste je terminal afsluiten zonder dat je programma afgebroken wordt, maar nu het 'disowned' is gaat de uitvoer van het programma nergens meer heen, wat niet in alle gevallen wenselijk is. Als het programma eenmaal gestopt is, weet je bijvoorbeeld niet eens of het wel succesvol afgesloten is. En invoer kun je aan het programma uiteraard ook niet meer geven. Maar voor wget- of curl-commando waarmee je een groot iso-bestand begon te downloaden vlak voor je je van je computer wou afmelden, is dit nog best nuttig.
Een flexibeler oplossing is het programma Reptyr. Hiermee kun je een programma van zijn terminal ontkoppelen en dit aan een andere terminal koppelen, zodat je de uitvoer van het programma daarin te zien krijgt. Zoek daarvoor eerst het process ID van het programma met pgrep
$ reptyr <pid>
Het programma wordt dan van de originele terminal afgekoppeld en verschijnt nu in de tweede terminal.
Reptyr is Linux-only omdat het ptrace gebruikt en afhangt van Linux-specifieke systeemaanroepen. Voor Ubuntu is er een PPA van Reptyr, en anders kun je het zelf compileren. Onder Ubuntu 10.10 en hoger is ptrace echter uitgeschakeld behalve voor enkele uitzonderingssituaties. Om reptyr dan te kunnen gebruiken moet je eerst ptrace inschakelen met het volgende commando als root:
# echo 0 > /proc/sys/kernel/yama/ptrace_scope
En om deze wijziging blijvend te maken, kun je in het bestand /etc/sysctl.d/10-ptrace.conf de volgende regel zetten:
kernel.yama.ptrace_scope = 0
Meer informatie over de werking van reptyr vind je op de website van de maker, Nelson Elhage, in zijn blogposts reptyr: Attach a running process to a new terminal en reptyr: Changing a process's controlling terminal. Andere programma's die iets soortgelijks doen zijn injcode en neercs.
De rubriek Tips & Tools biedt praktische informatie die IT-professionals in hun dagelijkse werk kunnen toepassen.
