2009-04-27 12 views
1

J'ai hier mis à jour par les applications MacPorts qui ont pris apparemment environ 4 heures. C'était irritant de voir le processus d'installation se dérouler dans un onglet du terminal.Impossible de masquer un processus en cours dans le terminal

Problème: pour cacher un processus en cours d'exécution dans terminalsuch qu'il ne prend pas de place dans ma zone de travail

J'ai trouvé aujourd'hui qu'il ya une nouvelle coproc de commande dans Bash 4:

coprocessus est exécuté de façon asynchrone dans une sous-couche, comme si la commande établie entre l'enveloppe et l'exécution de la coprocess

Je ne sais pas si vous pouvez l'utiliser pour résoudre le problème ou non. Je n'ai pas réussi à l'utiliser.

Comment pouvez-vous masquer le processus en cours afin qu'il ne soit pas visible dans le terminal mais qu'il continue à fonctionner?

+0

Probablement mieux pour déplacer ce à ServerFault quand vient le temps ... – dmckee

+0

@dmckee: oh, serverfault, vous voulez dire que le nouveau site web qui est dit ouvrir dans 6 semaines? –

+0

@ Jérôme: Ce serait le bon. C'est une bonne question, mais semble plus sur les lignes de "Comment puis-je exécuter l'ordinateur." que la programmation liée à moi. – dmckee

Répondre

4

Avez-vous considéré Ctrl + Z pour mettre le processus en pause, puis bg pour exécuter celui-ci en arrière-plan? Pour détacher votre processus du terminal, vous pouvez taper disown. Vous pouvez maintenant fermer le terminal, et même votre session.

Le problème ici est que les sorties apparaîtront quand même dans le bash.

Vous pouvez également démarrer votre programme au screen. Cette commande fournit un moyen facile de démarrer un programme, fermez la console et récupérez-la plus tard.

+0

Supposons que j'appuie sur Ctrl-Z et que j'exécute un processus d'installation par MacPorts. Cela peut-il causer des conflits si je fais une pause dans le processus et recommence? –

+3

Nice, mais je voudrais aussi suggérer «désavouer» après «bg» et puis vous pouvez fermer le terminal avec (probablement) pas de problèmes. –

+1

@Masi: Lorsque vous mettez en pause l'ensemble du processus, cela ne peut provoquer aucun conflit. C'est comme un très long processus. @Josh: Merci, je ne savais pas renier! Il est beaucoup plus simple qu'avec un écran de ne pas dépendre d'un terminal! –

2

Je soupçonne que vous cherchez nohup

nohup LongRunningNoisyProgram & 

va exécuter le programme, connectez la sortie à un fichier de sorte que vous ne le voyez pas, appuyez sur le programme dans l'arrière-plan, et n'annuler la programme si vous quittez votre terminal plus tard alors qu'il est encore en cours d'exécution.

+0

Nohup est un bon outil, mais pas d'aide si vous découvrez le problème * après * vous le démarrez ... – dmckee

+0

@McBeth: Qu'est-ce que le & do? –

+0

Est-ce que Firefox utilise la commande si vous la démarrez à partir du terminal? Il doit avoir une sortie dans le terminal lorsque vous l'utilisez. Il cache apparemment ces informations de l'utilisateur. –

0

Il y a au moins une chose que les autres replieurs n'ont pas couverte: comment gérer les processus de masquage. Supposons que vous ayez créé 100 processus d'arrière-plan avec "nohup find/&". Vous voulez les quitter pour vraiment voir comment fonctionnent les processus en arrière-plan. S'il vous plaît, utilisez la commande:

ps -ej | awk '! /grep/ && /find/ {print $2}' | xargs kill -9 

Ensuite, vous voudrez peut-être savoir comment contrôler les clés pour masquer les processus.Vous pouvez le modifier à p, où susp signifie CTRL + z (^ Z):

stty susp p

Vous pouvez voir les clés ici:

stty -a

Veuillez comparer les sorties avant et après le changement. Cette commande est particulièrement utile car elle permet de mémoriser d'autres commandes, telles que^W (pour supprimer un mot). Jerome avait un excellent conseil sur l'écran. Je vous recommande vivement de poursuivre la direction:

http://www.commandlinefu.com/commands/matching/screen/c2NyZWVu/sort-by-votes