Considérez l' nohup
exécution suivante :
nohup script.sh > script.out &
Existe-t-il un moyen de se déconnecter du terminal, de se reconnecter, de ramener le processus au premier plan et d'interagir avec lui à l'aide du clavier?
command-line
process
background
nohup
Adam Matan
la source
la source
nohup ne déconnecte pas une commande du terminal, il ignore votre script
SIGHUP
et redirigestdout/stderr
vers un fichiernohup.out
, afin que la commande puisse continuer à s'exécuter en arrière-plan après votredéconnexion.nohup
ne met pas automatiquement la commande qu'il exécute en arrière-plan. Il faut le faire explicitement, en terminant la ligne de commande par un&
.jobs
peut imprimer les travaux en cours d'exécution et leur état. Si la commandejobs
ne le trouve pas, il ne s'agit plus d'un processus enfant de ce shell.On peut ramener un travail d'arrière-plan au premier plan dans bash en utilisant
fg
même s'il est exécuté avecnohup
. Mais cela ne changera pas la redirection de sortie, qui ira toujours au fichiernohup.out
.Si vous fermez le shell / terminal ou fermez la session, votre commande n'est plus un enfant de ce shell. Il appartient au
init
processus. Si vous recherchez dans,pstree
vous verrez qu'il appartient maintenant au processus 1 (init
). Cela ne peut pas être ramené au premier plan car le premier plan n'existe plus.la source
If the command jobs cannot find it, then it is no longer a child process of that shell.
Ceci est faux: essayez cette séquence pour voir comment:sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
. Après cette commande, vous verrez toujours lesleep
travail avec le même PID imprimé lorsque vous l'avez généré, tandis quejobs
rien ne s'imprimera. La seule façon dont un processus enfant peut cesser d'être un enfant est de perdre son parent (puis l'orphelin devient l'enfantinit
) ou de bifurquer + quitter (mais le PID change, donc ce n'est pas l'enfant d'origine).Je vais appuyer l'utilisation d'un terminal multiplexeur, mais tmux , pas d'écran. L'écran est, à toutes fins utiles, non entretenu. Sa configuration est un art sombre, probablement enregistré pour la première fois dans une annexe du Necronomicon. Tenter d'écrire votre propre configuration est un aperçu de Cthulu. Sérieusement. Regardez les fichiers .screenrc des gens . Pour être sûr, il existe des moyens de médier l'abomination d'un fichier de configuration par l'écran. Byobu fait un travail admirable en tant que voile entre les utilisateurs mortels et le code impie. Il est livré avec des couleurs sensées, une interface de menu et peut-être plus important encore, une barre d'état.
Mais comme je l'ai dit, je recommande plutôt tmux . Il nécessite toujours une configuration mineure, mais il est bien documenté et votre fichier de configuration ne ressemblera pas à du charabia. De plus, vous commencez avec des couleurs et une barre d'état. Comparez mes fichiers screenrc et tmux.conf:
la source
Si vous êtes juste intéressé à regarder la sortie live, cela pourrait vous convenir:
la source
Toute commande Linux peut être envoyée en arrière-plan avec '
&
' ajouté en dernier.Pour afficher tous les travaux d'arrière-plan, vous pouvez émettre
jobs
Ici, je gère 3 emplois en arrière-plan: zookeeper, kafka et mongo daemon. [1], [2] et [3] sont les numéros de tâche respectifs pour ces tâches.
Vous pouvez mettre ces tâches au premier plan en utilisant
fg %$taskNumber.
la source