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?)
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?)
À l'aide de la Tâche de Contrôle de bash pour envoyer le processus en arrière-plan:
bg
pour l'exécuter en arrière-plan.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.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.
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
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.
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.