Processus Linux pour l'arrière-plan – relogin – comment ramener le processus au premier plan?

Je lance un processus, le met en arrière plan, puis ferme-toi, puis je me connecte à nouveau, et je souhaite que le processus soit remis à neuf. J'ai regardé dans "ps aux" pour le PID, mais il ne sera pas mis au premier plan avec "fg ###". Quelle est la manière correcte?

(J'utilise le même compte pour les deux sessions de connexion.)

La façon la plus courante d'accomplir ceci est probablement avec l' écran GNU .

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

Fondamentalement, vous:

  • Assurez-vous que l' screen est installé. En règle générale, il s'agit de l' screen du paquet sur la plupart des distributions Linux. Il est installé par défaut sur Mac OS X.
  • Exécuter l' screen

Texte alt

Texte alt

  • Exécutez le programme que vous souhaitez "fond". Par exemple, je commence à supprimer un fichier journal:

Texte alt

  • Appuyez sur Ctl-a, d pour détacher l'écran.

  • Déconnectez-vous, faites d'autres choses, ce que vous voulez. Ici, je vais envoyer un message au journal.

Texte alt

  • Lorsque vous vous connectez à nouveau, tapez l' screen -r pour réinstaller la session que vous étiez en cours d'exécution. Ici, vous pouvez voir le message que j'ai envoyé au journal (et un test antérieur, également).

Texte alt

L'écran est considéré par beaucoup comme un outil utilisateur puissant sur Linux / Unix, et je suis disposé à accepter!

Pour plus d'informations sur l'écran, consultez sa page d'accueil, ou cet article en profondeur d' Ars Technica .

AFAIK, il n'y a aucun moyen direct de mettre en avant un processus qui a été démarré et fondé sur un autre shell. Il existe cependant quelques façons de contourner cela.

La meilleure façon est d'utiliser l' écran GNU . Démarrez une session d'écran, démarrez votre processus, détachez-vous de la session d'écran, déconnectez-vous, connectez-vous, rebranchez-vous à la session d'écran. Le processus est toujours en cours d'exécution et l'écran conserve toute sortie dans les tampons de fenêtre. Vous n'avez même pas besoin de l'extraire; Vous pouvez le laisser fonctionner dans une seule fenêtre d'écran et utiliser d'autres pour d'autres tâches.

La manière délicieuse de hacking est de le détacher du terminal avant de se déconnecter. Dans bash, disown -h %[jobid] fait cela; D'autres shells comme tcsh le font automatiquement pour les processus d'arrière-plan lorsque vous quittez le shell. (Obtenez le $[jobid] en exécutant les jobs la commande.) Vous ne pouvez pas vous connecter à la procédure directement, mais si tout ce dont vous avez besoin est stdout / stderr / stdin d'un processus, vous pouvez utiliser GDB pour fausser le réattachement. Il s'agit d'un mode d'emploi partiel de cette source (initialement inclus dans une autre réponse ):

[…] avec des hacks sales, il n'est pas impossible de rouvrir un processus 'stdout / stderr / stdin' '.

Vous pouvez donc créer une fenêtre d'écran vierge (par exemple, qui fonctionne en mode veille).

Et puis utiliser gdb par exemple pour attacher à la procédure, faire appel à proximité (0)
Appel fermé (1)
Appel fermé (2)
Appel ouvert ("/ dev / pts / xx", …)
Appel dup (0)
Appel dup (0)
détacher

La sortie du processus irait à l'écran. Il ne serait pas attaché à ce terminal d'écran, alors, par exemple, [sic] tue la commande "sommeil", pas le processus, mais cela pourrait suffire à l'OP.

Il existe certaines façons de faire bash faire des désavantages automatiques , mais ils impliquent des magasins ou des trucs de nohup ou d'autres trucs de bash pour éviter le SIGHUP automatique. Bash n'est pas aussi gracieux que tcsh dans ce domaine, et vous devez savoir à l'avance que vous aurez besoin de cela pour configurer l'option. Il est un peu plus facile de se souvenir d' annuler votre travail d'arrière-plan avant de sortir.