J'ai un programme en cours d'exécution sur un shell SSH. Je veux le mettre en pause et pouvoir réactiver son exécution à mon retour.
L'une des façons dont j'ai pensé à le faire était de transférer sa propriété à un shell d'écran, le maintenant ainsi en cours d'exécution.
Existe-t-il une autre façon de procéder ?
Réponse acceptée :
Vous pouvez révoquer la "propriété" du programme depuis le shell avec le disown
intégré :
# press Ctrl+Z to suspend the program
bg
disown
Cependant, cela indique seulement au shell de ne pas envoyer de SIGHUP
signal au programme lorsque le shell se termine. Le programme conservera toute connexion qu'il a avec le terminal, généralement sous forme de flux d'entrée, de sortie et d'erreur standard. Il n'y a aucun moyen de les rattacher à un autre terminal. (Screen fonctionne en émulant un terminal pour chaque fenêtre, de sorte que les programmes sont attachés à la fenêtre de l'écran.)
Il est possible de rattacher les descripteurs de fichier à un fichier différent en attachant le programme dans un débogueur (c'est-à-dire en utilisant ptrace
) et en le faisant appeler open
, dup
et close
. Il existe quelques outils qui font cela; c'est un processus délicat, et parfois ils planteront le processus à la place. Les possibilités incluent (liens collectés à partir des réponses à Comment puis-je désavouer un processus en cours d'exécution et l'associer à un nouveau shell d'écran ? et Puis-je nohup/filtrer un processus déjà démarré ?) :
- grab (et le cryopide plus ambitieux)
- neercs
- redirection
- reptyre
- rety