7 votes

Attacher un processus à un terminal sous LInux

J'ai un fichier ouvert dans vi exécuté dans un terminal( xterm ), si je ferme directement le terminal sans avoir préalablement fermé le fichier, je peux voir l'icône vi toujours en cours d'exécution en arrière-plan( ps x ). Existe-t-il un moyen d'attacher ce processus, c'est-à-dire vi, à un autre terminal afin que je puisse continuer à travailler sur le fichier ? J'ai également essayé fd mais elle échoue.

3voto

Ce n'est pas possible "proprement". Il existe des outils tels que écran y tmux qui créent un terminal virtuel rémanent : vous pouvez démarrer votre programme dans screen, détacher la session screen, et plus tard rattacher la session screen sur un autre terminal. Mais cela nécessite une planification préalable.

Il est possible d'utiliser ptrace de tripoter les descripteurs de fichiers du processus pour les reconnecter à un autre terminal. Cela ne fonctionne pas de manière fiable car cela peut créer des incohérences dans les structures de données du processus : certains programmes ne s'en soucient pas, d'autres se plantent. Vous pouvez le faire en attachant le programme dans un débogueur et en émettant la bonne séquence d'appels système (au moins open , dup y close pour chacune des entrées standard, sorties standard et erreurs standard). Il existe plusieurs outils qui peuvent faire cela, par exemple neercs y Retenue .

Voir aussi Comment puis-je mettre en pause un processus en cours d'exécution via ssh, le désactiver, l'associer à un nouvel écran Shell et le remettre en pause ? , Afficher le script via SSH ? , Puis-je interrompre/écraser un processus déjà lancé ? , Reprise de la commande en cours d'exécution dans une session SSH abandonnée .

1voto

Vous pouvez essayer Écran GNU . Il est conçu à cet effet.

Screen est un gestionnaire de fenêtres plein écran qui multiplexe un terminal physique entre plusieurs processus, généralement des shells interactifs.

0voto

Chris Stratton Points 319

Vous pouvez utiliser GDB pour attacher un processus en cours d'exécution à un terminal.

Voici une description répartie sur plusieurs réponses à une question (voir notamment celle de Mirek) :

https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-line

-1voto

Javide Points 493

Pas moyen de faire ça. Il suffit de tuer le processus détaché. Si vous voulez le faire intentionnellement, jetez un coup d'oeil à la commande 'screen'. Cela ne vous sauvera pas si votre Shell sous-jacent meurt cependant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X