1097 votes

Comment puis-je mettre déjà un processus en cours d'exécution en vertu de l'nohup

J'ai un processus qui est déjà en cours d'exécution pendant une longue période et ne veulent pas mettre fin.

Comment puis-je la mettre sous nohup (c'est à dire comment je fais pour continuer à fonctionner même si je ferme le terminal?)

1568voto

Node Points 7859

À l'aide de la Tâche de Contrôle de bash pour envoyer le processus en arrière-plan:

  1. Ctrl+Z pour arrêter (pause) le programme et revenir au shell.
  2. bg pour l'exécuter en arrière-plan.
  3. disown -h [job-spec] où [job-spec] est le nombre d'emplois (comme %1 pour le premier travail en cours d'exécution; trouver au sujet de votre numéro avec l' jobs commande) de sorte que le travail n'a pas été tué lorsque le terminal se ferme.

216voto

Pungs Points 511

Supposons que pour une raison quelconque Ctrl+Z est aussi ne fonctionne pas, passer à un autre terminal, trouver l'id de processus (à l'aide d' ps) et de l'exécuter:

kill -20 PID 
kill -18 PID

kill -20 de suspendre le processus et kill -18 va reprendre le processus en arrière-plan. Alors maintenant, la fermeture de vos deux bornes de ne pas arrêter votre processus.

102voto

serioys sam Points 1245

La commande de se séparer d'un travail en cours d'exécution à partir de l'interpréteur de commandes ( = rend nohup) disown et une base de commande shell.

De bash-page de manuel (man bash):

renier [ar] [-h] [jobspec ...]

Sans options, chaque jobspec est supprimée de la table des tâches actives. Si l'option-h est donné, chaque jobspec n'est pas retiré de la table, mais est marqué de sorte que SIGHUP n'est pas envoyé à la poste, si le shell reçoit un signal SIGHUP. Si aucun jobspec est présent, et ni l'un ni l'option-r est fourni, le travail en cours est utilisé. Si aucun jobspec est fourni, l'option-a moyens d'éliminer ou de marque de tous les emplois; l'option-r sans jobspec argument limite de l'opération de travaux en cours d'exécution. Le retour la valeur est 0, sauf si un jobspec ne spécifiez pas un emploi valable.

Cela signifie, que d'un simple

disown

va supprimer tous les emplois de l'emploi de la table et les rend nohup

85voto

Q Boiler Points 430

Ce sont de bonnes réponses ci-dessus, je voulais juste ajouter une précision:

Vous ne pouvez pas disown un pid ou un processus, disown un emploi, et c'est une distinction importante.

Un travail est quelque chose qui est une notion d'un processus qui est attaché à un shell, par conséquent, vous devez jeter le travail en arrière-plan (pas en veille), puis de le désavouer.

Question:

%  jobs
[1]  running java 
[2]  suspended vi
%  disown %1

Voir http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/ pour une discussion plus détaillée de l'Unix de Contrôle des tâches.

59voto

Dale Points 131

Unrfortunately disown est spécifique à bash et ne sont pas disponibles dans tous les shells.

Certaines saveurs de Unix (par exemple, AIX et Solaris) ont une option sur l' nohup commande en elle-même qui peut être appliquée à un processus en cours d'exécution:

nohup -p pid

Voir http://en.wikipedia.org/wiki/Nohup

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X