reptyr - Reassoccie un programme en cours d'exécution à un nouveau
terminal
reptyr PID
reptyr -l
reptyr est un utilitaire qui prend un programme en cours
d'exécution et l'attache à un nouveau terminal. Vous avez
démarré un programme long à travers ssh, mais vous devez
partir et vous ne voulez pas l'interrompre ? Démarrez simplement
un screen, utilisez
reptyr pour l'attraper, puis tuez la session ssh et
vous pouvez rentrer à la maison.
reptyr fonctionne en s'attachant au programme visé à l'aide
de
ptrace(2), en redirigeant les descripteurs de fichiers
appropriés et en modifiant le terminal de contrôle du programme
(Voir
tty(4)) C'est le détail qui fait que
reptyr
focntionne bien mieux que les autres programmes du même type, comme
retty(1).
Après avoir attaché un programme, il apparaît soit à
l'arrière-plan, soit suspendu pour le shell qui l'a lancé
(variable en fonction du shell). Pour une sécurité maximale,
vous pouvez exécuter
- bg; disown
dans le vieux shell pour supprimer l'association avec le programme, mais
reptyr tente de s'assurer que le programme visé reste en cours
d'exécution même si vous fermez le shell sans le faire.
-l
- Plutôt que d'attacher un nouveau processus,
crée un couveau couple de pty, redirige l'extrémité
maîtresse vers le terminal en cours, puis affiche le nom du pty
esclave. Il pourra être passé en argument par exemple
à l'option set inferior-tty de gdb.
-s
-
Par défaut, reptyr déplace tout descripteur de fichier de la
cible qui était connecté au terminal de contrôle vers
le nouveau terminal. L'option -s fait que reptyr attache les
descripteurs de fichiers 0, 1 et 2 sans condition même si la cible
n'a pas de terminal de contrôle ou qu'elle n'est pas
connectée à un terminal.
-v
- Affiche la version de reptyr et sort.
-h
- Affiche un message d'usage et sort.
-V
- Affiche des messages verbeux.
reptyr dépend de l'appel système
ptrace(2) pour
s'attacher au programme distant. Sur Ubuntu Maverick et suivant cette
possibilité est désactivée par défaut pour des
raisons de sécurité. Vous pouvez l'activer temporairement avec
-
# echo 0 > /proc/sys/kernel/yama/ptrace_scope
en tant que rootn ou de manière permanente en éditant le fichier
/etc/sysctl.d/10-ptrace.conf, ui contient aussi plus d'information sur
ce réglage.
Quand on s'attache à quelques programmes curses, ils ne redessinent pas
immédiatement l'écran, et un
^L ou équivalent est
nécessaire pour forcer l'actualisation.
De la même manière, après avoir attaché certains
programmes, le vieux terminal est dans un état étrange et un
clear ou même un
reset est nécessaire avant que le
vieux terminal ne soit à nouveau utilisable.
L'attachement à rtorrent (et peut-être à d'autres
applications) ne fonctionne pas (rtorrent arrête d'accepter des
entrées). Le problème est que rtorrent utilise epoll pour
vérifier l'entrée standard et qu'on ne met pas à jour la
référence interne que le descripteur de fichier d'epoll a de
l'ancien terminal.
L'attachement à un processus avec des fils ne fonctionne pas
correctement. Il devrait être possible de le corriger. Il faut juste
ptracer chaque fils individuellement et de jouer avec lui.
L'attachement à un processus
less(1) ne fonctionne pas si vous
avez un fichier
.lessfilter parce que
less abandonne un fils
zombie dans ce cas. Ça devrait pouvoir être corrigé.
Vous pouvez rapporter des bugs à l'auteur (voir ci-dessous) ou par
l'issue tracker sur GitHub.
reptyr est écrit par Nelson Elhage <
[email protected]>.
neercs(1),
screen(1)