web-dev-qa-db-fra.com

Est-il possible de détacher un processus de son terminal? (Ou: "J'aurais dû utiliser l'écran!")

Duplicata possible:
Puis-je Nohup/filtrer un processus déjà commencé?

Sous Unix (spécifiquement, Linux), j'ai commencé un travail dans une session ssh-> bash régulière. J'aimerais bientôt quitter le travail, mais je me rends compte maintenant que le travail va prendre plusieurs heures.

Si je venais de commencer ce travail à l'écran, je pourrais me détacher et rentrer chez moi. Mais je ne l'ai pas fait.

Existe-t-il un moyen de déconnecter le travail de sa session ssh, afin que je puisse arrêter mon ordinateur (en supprimant la connexion TCP et en supprimant la session ssh)), tout en continuant à exécuter le programme?

Je me fiche de sa sortie - en fait, j'ai redirigé stdout vers un fichier. Je veux juste qu'il se termine.

146
mike

Vous pouvez appuyer sur ctrl-z pour interrompre le processus, puis exécutez bg pour le faire fonctionner en arrière-plan.

Vous pouvez afficher une liste numérotée de tous les processus mis en arrière-plan de cette manière avec jobs.

Ensuite, vous pouvez exécuter disown %1 (remplacer 1 avec le numéro de processus sorti par jobs) pour détacher le processus du terminal.

Malgré le nom, le processus vous appartiendra toujours après avoir exécuté disown, il sera juste détaché du terminal dans lequel vous l'avez démarré.

Cette réponse contient plus d'informations

201
David Pashley

Je crois que la commande que vous recherchez est "reniée"

21
Seigel
 Utilisez la commande 
 Nohup & 
 
 Est magnifique: 
 Root @ index: ~ # Nohup/usr/bin/curl localhost/begemot.php & 
 [1] 894 
 Root @ index: ~ # Nohup: ignorer l'entrée et ajouter la sortie à "Nohup.out" 
 
 Et quitter ce terminal, une tâche se poursuit ... 
13

Depuis votre shell bash:

control+z

Ensuite, pour continuer à exécuter le travail en arrière-plan:

bg

Plus tard, vous pouvez taper jobs pour voir si votre processus est toujours en cours d'exécution.

9
Joe

Lorsque vous utilisez reptyr à l'intérieur de l'écran, vous pouvez déplacer le processus (ou sa sortie) dans l'écran.

8
mab

J'ai pris l'habitude de configurer screen pour qu'il s'exécute automatiquement lorsque je me connecte aux hôtes que j'utilise régulièrement, pour éviter ce problème.

http://tlug.dnho.net/?q=node/239 est une façon de le faire, bien qu'il existe d'autres variantes.

M'a sauvé une ou deux fois lorsque j'ai eu une déconnexion inattendue en cours de session et aurait sinon oublié de démarrer screen avant de commencer quelque chose de long.

7
David Spillett

Utiliser crtl-Z puis bg ou utiliser & lors de l'exécution de la commande n'est pas fiable à 100%. Cela fonctionnera dans la plupart des cas mais peut ne pas fonctionner comme prévu dans certains cas (utilisation des E/S, ...).
Screen est une solution fiable.

6
radius

Si vous utilisez bash, vous pouvez suspecter avec control-Z et background avec bg.

Contrôle des tâches (de man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

aide bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the Shell's notion of the current
    job is used.

emplois d'aide

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.
5
Zoredache

Si vous savez à l'avance que vous souhaitez l'exécuter en arrière-plan, la commande unix at est une bonne option. Il démarre les commandes en arrière-plan à l'heure planifiée, tout comme un travail cron qui ne se répète pas. Selon votre distribution, vous devrez peut-être l'installer et démarrer le démon atd.

4
Sylvain