362 votes

Comment détacher entièrement un processus de Terminal ?

J'utilise Tilda (terminal déroulant) sur Ubuntu comme ma "centrale de commande" - à peu près comme d'autres pourraient utiliser GNOME Do, Quicksilver ou Launchy.

Cependant, je ne sais pas comment détacher complètement un processus (par exemple Firefox) du terminal à partir duquel il a été lancé, c'est-à-dire empêcher qu'un tel processus (non-)enfant

  • se termine par la fermeture du terminal d'origine
  • "pollue" le terminal d'origine via STDOUT/STDERR

Par exemple, afin de démarrer Vim dans une fenêtre de terminal "correcte", j'ai essayé un simple script comme le suivant :

exec gnome-terminal -e "vim $@" &> /dev/null &

Cependant, cela entraîne toujours une pollution (de même, le fait de passer un nom de fichier ne semble pas fonctionner).

1 votes

C'est aussi une bonne question. Je pense qu'il est juste de considérer Bash comme un langage de programmation - bien que la portée de cette question soit probablement plus du côté des administrateurs système...

0 votes

Il s'agit d'un duplicata de cette question stackoverflow.com/questions/285015/

0 votes

9voto

Nathan Fellman Points 8972

En tcsh (et peut-être aussi dans d'autres shells), vous pouvez utiliser des parenthèses pour détacher le processus.

Comparez-le :

> jobs # shows nothing
> firefox &
> jobs
[1]  + Running                       firefox

A ceci :

> jobs # shows nothing
> (firefox &)
> jobs # still shows nothing
>

Cela supprime firefox de la liste des travaux, mais il est toujours lié au terminal ; si vous vous êtes connecté à ce nœud via 'ssh', essayer de vous déconnecter bloquera toujours le processus ssh.

9voto

Je pense que l'écran pourrait résoudre votre problème

8voto

jitendra Points 81

Pour dissocier le tty Shell exécuter la commande par le sous-Shell par exemple.

(commande)&

Lorsque exit est utilisé, le terminal est fermé mais le processus est toujours en vie.

vérifier -

(sleep 100) & exit

Ouvrir l'autre terminal

ps aux | grep sleep

Le processus est toujours en cours.

0 votes

C'est exactement ce dont j'avais besoin. J'essayais d'ajouter un raccourci de console pour sublime text et cela fonctionne parfaitement, voici ce que j'ai obtenu : ("/opt/Sublime Text 2/sublime_text" $@)&

6voto

djangofan Points 2677

Mettre en arrière-plan et en avant-plan une tâche est probablement l'une des toutes premières choses que tout administrateur système Unix devrait savoir.

Voici comment le faire avec bash :

./script.sh
# suspend process
{ctrl-Z}
# background process
bg
# list all backgrounded jobs
jobs
# bring it back to foreground
fg

4voto

Ben Points 149

Vous pouvez exécuter votre commande en utilisant la commande nohup, cela détache votre processus et redirige les sorties vers un fichier donné... mais je ne suis pas sûr que ce soit exactement ce dont vous avez besoin....

0 votes

Je pourrais jurer que j'avais essayé nohup avant d'utiliser exec - mais apparemment pas correctement, car cela fonctionne comme ceci : nohup gnome-terminal -e "vim $@" &> /dev/null &

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X