Parfois, je veux lancer un processus et l'oublier. Si je le lance à partir de la ligne de commande, comme ceci:
redshift
Je ne peux pas fermer le terminal, sinon cela mettrait fin au processus. Puis-je exécuter une commande de telle manière que je puisse fermer le terminal sans tuer le processus?
yourExecutable &
et que les sorties continuent à s'afficherCtrl+C
sans que rien ne semble arrêter, il vous suffit de taper aveuglémentdisown;
et d'appuyerEnter
même si l'écran défile avec des sorties et vous ne pouvez pas voir quoi. vous tapez. Le processus sera désavoué et vous pourrez fermer le terminal sans que le processus ne meure.Réponses:
L'un des 2 suivants devrait fonctionner:
ou
Voir ce qui suit pour un peu plus d'informations sur la façon dont cela fonctionne:
man nohup
help disown
Différence entre nohup, disown et & (assurez-vous de lire les commentaires également)
la source
redshift & disown
) a travaillé pour moi sur Ubuntu 10.10. Il semble bien fonctionner en mettant tout cela sur une seule ligne. Y a-t-il une raison pour laquelle je ne devrais pas faire cela?nohup redshift &
ainsi). Et mettre la seconde sur une ligne est correct, bien que vous sépariez généralement avec;
(redshift &; disown
);
et&
sont des séparateurs de commande et ont la même priorité. La seule différence est l'exécution synchrone par rapport à l'exécution asynchrone (respectivement). Il n'y a pas besoin d'utiliser&;
de préférence à juste&
(ça marche, mais c'est un peu redondant).redshift &!
désavouer redshift immédiatement.Si votre programme est déjà en cours d' exécution, vous pouvez le suspendre avec
Ctrl-Z
, tirez-le en arrière-plan avecbg
et ensuitedisown
, comme ceci:la source
disown
ne déconnecte pas stdout ou stderr. Cependantnohup
, comme pour>/dev/null
(déconnexion standard),2>/dev/null
(erreur standard de déconnexion). Il (disown
) déconnecte le contrôle du travail.La bonne réponse est déjà postée par @StevenD, mais je pense que cela pourrait clarifier un peu plus.
La raison pour laquelle le processus est tué à la fin du terminal est que le processus que vous démarrez est un processus enfant du terminal. Une fois que vous fermez le terminal, ces processus enfants seront également supprimés. Vous pouvez voir l’arbre de processus avec
pstree
, par exemple lors de l’exécutionkate &
de Konsole:Pour que le
kate
processus soit séparé de lakonsole
finkonsole
, utiliseznohup
la commande, comme ceci:Après la fermeture
konsole
,pstree
ressemblera à ceci:et
kate
va survivre. :)Une alternative consiste à utiliser
screen
/tmux
/byobu
, qui maintiendra le shell en marche, indépendamment du terminal.la source
Vous pouvez exécuter le processus comme ceci dans le terminal
setsid process
Cela lancera le programme dans une nouvelle session. Comme expliqué http://hanoo.org/index.php?article=run-program-in-new-session-linux
la source
nohup.out
. 2) Il ne reste pas dans la liste des tâches de votre shell, il n’encombrera donc pas la sortie dejobs
.Bien que toutes les suggestions fonctionnent bien, j’ai trouvé que mon alternative est d’utiliser
screen
un programme qui configure un terminal virtuel sur votre écran.Vous pourriez envisager de commencer avec . Screen peut être installé sur pratiquement tous les dérivés de Linux et Unix. Frapper + et (minuscule) va commencer une deuxième session. Cela vous permettrait de basculer entre la session initiale en appuyant sur + et ou la session plus récente en appuyant sur + et . Vous pouvez avoir jusqu'à dix sessions dans un terminal. J'avais l'habitude de commencer une session au travail, de rentrer chez moi, de ssh dans ma machine de travail, puis d'invoquer . Cela vous reconnectera à cette session à distance.
screen -S session_name
CtrlACCtrlA0CtrlA1screen -d -R session_name
la source
screen -d -m command
va commencer dans l'écran déjà détaché:~# screen -d -m top ~# screen -ls There is a screen on: 10803..Server-station (Detached) 1 Socket in /root/.screen. ~# screen -x
.... et vous êtes.La seule façon de faire tout cela consiste à fermer stdin et à mettre en arrière-plan la commande:
Ensuite, il ne s’arrêtera pas lorsque vous quitterez le shell. La redirection de stdout est une bonne chose optionnelle à faire.
L'inconvénient est que vous ne pouvez pas le faire après coup.
la source
J'ai un script pour:
Exécuter des commandes arbitraires en arrière-plan
Empêchez-les d'être tués avec la fenêtre du terminal
Supprimer leur sortie
Gère le statut de sortie
Je l' utilise principalement pour
gedit
,evince
,inkscape
etc que tous ont beaucoup de sortie du terminal ennuyeux. Si la commande se termine avantTIMEOUT
, l'état de sortie de nohup est renvoyé au lieu de zéro.exemples...
la source
Je préfère:
(Nom de l'application &)
par exemple:
linux@linux-desktop:~$ (chromium-browser &)
Veillez à utiliser des parenthèses lorsque vous tapez la commande!
la source
nohup
empêche toute sortie tty et je voulais juste rediriger la sortie vers un fichier et cela l'empêchait donc c'est la meilleure solution pour moi.Vous pouvez définir un processus (PID) pour ne pas recevoir de signal HUP lors de la déconnexion et de la fermeture de la session de terminal. Utilisez la commande suivante:
la source
Sans doute semblable à la réponse offerte par apolinsky , j'utilise une variante sur
screen
. La commande vanille est comme çaLa session peut être déconnectée Ctrl ACtrl Det reconnectée dans le cas simple avec
screen -r
. J'ai ceci emballé dans un script appelésession
qui vit dans monPATH
prêt pour un accès pratique:Cela ne fonctionne que si vous savez à l'avance que vous souhaitez déconnecter un programme. Cela ne permet pas de déconnecter un programme en cours d'exécution .
la source
De la même manière que les réponses précédentes, il est possible de transférer un processus en cours pour utiliser "screen" rétrospectivement grâce à reptyr , puis de fermer le terminal. Les étapes sont décrites dans ce post . Les étapes à suivre sont:
la source