Disons que vous avez démarré une nouvelle application sous Linux (comme un éditeur de texte, etc.), mais vous avez oublié d'utiliser le «&». Quelle (s) commande (s) utiliseriez-vous pour faire fonctionner ce processus en arrière-plan, sans devoir FERMER cette application? De cette façon, vous pouvez avoir les deux processus ouverts et travailler séparément (par exemple, le terminal de ligne de commande que vous avez utilisé pour créer le processus et le processus tel qu'un éditeur de texte toujours en cours d'exécution.?
24
tmux
donne peut-être les mêmes fonctionnalités que souhaité dans votre question.Réponses:
Dans la fenêtre du terminal, vous tapez généralement Control+ Zpour "suspendre" le processus, puis utilisez la
bg
commande pour le "mettre en arrière-plan".par exemple avec une commande de sommeil
Nous pouvons voir que le processus est en cours d'exécution et j'ai toujours ma ligne de commande.
la source
fg
commande, qui prend l'ID du travail (spécifié entre parenthèses,1
dans ce cas) comme paramètre. Il n'est pas spécifique à l'utilisation debg
et peut être effectué sur des processus lancés avec&
.Ctrl+ Zest le moyen de le faire, mais juste pour être complet: la question demande "commande", et ce serait (depuis un autre terminal):
et puis bien sûr
depuis le terminal d'application.
la source
Dans Bash:
Ctrl+ Zet puis
bg
.Maintenant, exécutez
jobs
et voyez le résultat.la source
/bin/sh
et cela n'aurait donc pas fonctionné :-)Par mesure préventive pour l'inconvénient d'avoir à appuyer sur CTRL- z, vous pouvez créer un script wrapper pour votre éditeur sur lequel exécuter votre éditeur en arrière-plan. De cette façon, vous n'auriez pas besoin de vous souvenir de le démarrer en arrière-plan explicitement:
Ci-dessus, nous essayons d'abord de déterminer si vous avez un serveur X disponible et d'exécuter l'éditeur en arrière-plan (sinon, de nombreux éditeurs Unix utiliseront votre terminal à la place et vous ne voulez pas exécuter l'éditeur en tant que processus d'arrière-plan dans ce cas) . Il passera tous les arguments à votre éditeur de choix verbatim (
"$@"
) comme vous l'avez fourni pour le script wrapper.Quant à la commande qui vous manque ... Selon mon expérimentation de base, pour les programmes GUI qui n'impliquent pas de terminal, cela pourrait être aussi simple que d'envoyer d'abord
SIGSTOP
puisSIGCONT
au processus de premier plan (en utilisant lakill
commande si vous utilisez un script shell pour l'implémenter) . Vous auriez bien sûr besoin de l'exécuter dans une autre fenêtre / onglet de terminal, et la difficulté serait de trouver de manière pratique et générique le PID auquel vous souhaitez envoyer votre signal. Vous pouvez par défaut envoyer les deux signaux à tous les processus du nom donné (par défaut à votre éditeur préféré et autorisant également l'utilisation des PID comme arguments):Cette méthode m'a correctement donné mes onglets de terminal après avoir exécuté (plusieurs)
emacs
commandes en arrière-plan. Mais le processus emacs en cours d'exécution dans le terminal n'a pas été correctement restauré en raison du contrôle du travail du shell ou de la confusion des paramètres du terminal. Cette méthode bénéficierait donc d'une certaine sophistication.C'est
SIGSTOP
exactement ce qui est envoyé au processus de premier plan lorsque vous appuyez sur (par défaut commun) CTRL- z. Se référer à lastty -a
sortie(sortie abrégée) et
stty
page de manuel:Les processus arrêtés à l'aide du
SIGSTOP
signal peuvent être redémarrés en envoyantSIGCONT
. Normalement, c'est la logique de contrôle du travail du shell qui enverraSIGCONT
et prendra en charge les autres manipulations nécessaires impliquées avec les commandesfg
etbg
que nous ignorerons.la source