J'ai quitté le bureau plus tôt avec une fenêtre de terminal active exécutant un script sur un serveur Centos 7. Maintenant que je me connecte depuis chez moi et je veux voir où cela en est. Est-ce possible? Puis-je rejoindre la même fenêtre de terminal d'ici?
8
strace -e write -p 12345
(remplacez le pid du processus qui vous intéresse). Une autre option est:strace -e read -p 12345
(remplacez le pid de l'émulateur de terminal). En principe, il serait possible d'écrire un programme pour utiliser l'ptrace
appel système pour collecter les informations de la même manière questrace
pour les écrire directement sur son propre terminal. Je ne sais pas si un tel programme existe, mais il couvrirait les exigences spécifiées dans votre question.Réponses:
Comme l'a mentionné @Sven, la meilleure option est d'utiliser
screen
outmux
. Ce sont des outils appelés "multiplexeurs terminaux". Ils vous permettent de créer des sessions shell qui peuvent être attachées et non attachées aux connexions réelles. Ces outils ne sont pas seulement utiles pour vérifier votre travail à partir d'un autre terminal, mais ont d'autres fonctionnalités, notamment le partage de votre session avec un autre utilisateur et la garantie que votre commande ne s'arrête pas si vous perdez votre connexion Internet. Si vous recherchezscreen
, vous pouvez essayer de rechercher "Écran GNU". Ces deux outils sont disponibles sur la plupart des systèmes Linux.En règle générale, vous démarrez la session, puis exécutez votre commande à l'intérieur de cette session. Cependant, si vous avez déjà démarré la commande, vous souhaiterez peut-être consulter un article sur le déplacement d'une commande en cours d'exécution dans une session d'écran. Cependant, je ne recommanderais pas d'essayer la première fois sur quelque chose d'important. Cette question peut être utile:
Déplacer un processus déjà en cours vers Screen
Si vous voulez seulement vérifier si le processus est en cours d'exécution, mon outil préféré serait strace. Cet outil vous permet de voir chaque appel de noyau effectué par un processus. Il peut falloir des compétences pour comprendre la sortie, mais cela devrait au moins vous donner une idée si le processus est en cours d'exécution, et si vous regardez assez près, il pourrait attraper les noms de fichiers qu'il ouvre. Pour ce faire, commencez par trouver le PID, peut-être en effectuant une recherche
ps aux|grep yourcommand
, puis:Vous pouvez ^ C pour en sortir. Cela peut ne pas vous permettre de vous reconnecter, mais si vous voulez simplement savoir ce qu'il fait, cela devrait être suffisant.
la source
Une façon de le faire: TMUX
Comme la plupart des réponses l'ont déjà souligné - si dans une session SSH existante - vous utilisez
tmux
(ouscreen
) avec la commandeVous êtes maintenant dans une nouvelle session bash, dans laquelle vous pouvez démarrer votre programme / commande. Vous pouvez le fermer à tout moment (mais pas avec CTRL + D, plutôt en fermant la fenêtre) et y revenir plus tard en établissant une connexion SSH avec le même utilisateur sur la même machine et en écrivant la commande
Vous pouvez également avoir plusieurs
tmux
sessions en leur donnant des noms avecVous pouvez voir une liste de toutes les
tmux
sessions ouvertes pour votre utilisateur avecet attacher à une
tmux
session nommée avecTrouvez-en un complet
tmux cheat sheet
ici .Pour un programme en cours d'exécution
Jusqu'à présent, les réponses semblent ne pas être conscientes du fait que vous pouvez déplacer un processus déjà en cours d'exécution vers un autre
tmux
/screen
comme le souligne cette réponse . Le programme qui fait le travail est appeléreptyr
et sous Ubuntu / Debian vous pouvez l'installer avec un simpleAprès cela, recherchez l'ID de processus de votre programme en cours d'exécution (par exemple avec
top
ouhtop
), démarrez unetmux
session et un simplerattachera le processus en cours à votre
tmux
session bash.la source
À l'avenir, vous pouvez utiliser
screen
outmux
et puis rattacher une session en cours d'exécution.la source
J'utilise byobu et je trouve incroyablement puissant. Byobu est un gestionnaire de fenêtres à base de texte open source GPLv3 et un multiplexeur de terminaux.
Vous pouvez donc ouvrir une session byobu en tapant simplement "byobu". Et puis vous pouvez créer un nouvel onglet avec Ctrl + F2, et vous déplacer entre les onglets avec Ctrl + F3 pour l'arrière, Ctrl + F4 pour l'avant. Vous pouvez fermer un onglet avec Ctrl + F6 ou vous détacher d'une session avec Shift + F6. Vous vous reconnectez plus tard à la session en tapant simplement "byobu" à nouveau.
Byobu prend en charge les séparations verticales et horizontales, plein écran entre autres fonctionnalités de fantaisie. Il est disponible sur Ubuntu / Debian, CentOS / Fedora / RedHat et FreeBSD.
la source
tmux
etscreen
que beaucoup trouvent offre une meilleure expérience utilisateur qu'ils ne le font hors de la boîte.Comme cela a déjà été souligné, je recommande d'utiliser
tmux
ouscreen
à l'avenir, mais cela ne fonctionne que si vous y avez pensé au préalable.J'ai été dans votre situation à plusieurs reprises. Si le terminal que vous avez laissé en cours d'exécution était sur votre ordinateur de bureau, vous pouvez SSH dans votre PC et démarrer un serveur VNC. De cette façon, vous pouvez au moins vérifier le terminal ouvert.
la source
Comme tout le monde l'a mentionné, tmux peut être utilisé. l'écran n'est pas utile lorsque vous souhaitez partager l'écran avec plusieurs personnes.
Surtout, je recommande à tout le monde d'essayer https://tmate.io/ pour donner un accès temporaire, même à localmachine. tmate prend en charge tout ce qui précède :)
https://tmate.io/
la source