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.
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é.
Je crois que la commande que vous recherchez est "reniée"
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 ...
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.
Lorsque vous utilisez reptyr à l'intérieur de l'écran, vous pouvez déplacer le processus (ou sa sortie) dans l'écran.
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.
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.
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.
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.