Ceci est la bonne réponse. Sans nohup, le processus démarré est toujours considéré comme un "enfant" du processus terminal et donc terminé si le terminal est fermé.
Izzy
3
cmd & disownfonctionne aussi, car le &est traité comme un ;séparateur de commandes. La commande disown supprime la connexion entre la session shell bash et la commande en arrière-plan.
lornix
2
zsh a un raccourci pour cela: cmd &|.
Thor
Pour que cela fonctionne, j'ai dû changer une préférence dans Terminal.app. Sous Profils, sélectionnez votre profil actif, puis Shell> Lorsque le shell se termine> Fermer si le shell est sorti proprement
Antoine
6
En utilisant screen:
screen -S <session name> -d -m <your command>
après cela, vous pouvez quitter le terminal, vous pouvez également le rattacher en:
Si vous souhaitez exécuter une commande ou un fichier spécifique toutes les secondes environ en arrière-plan après avoir quitté le terminal, vous pouvez essayer cette petite chose facile;
"nohup" est déjà couvert par la réponse acceptée. Et je suis à peu près sûr que le demandeur a mentionné cron parce qu'ils l'utilisaient pour dire "Exécutez cette commande quelques secondes dans le futur", pas pour l'exécuter périodiquement.
David Richerby
1
Ma réponse n'aggrave pas les choses. Voyez le point de vote vers le bas. Neural serait suffisant.
dans ce cas, lorsque le terminal est fermé, le processus est également lancé par /home/your/script.sh- car il n'a pas été détaché de son "parent", mais simplement "en arrière-plan". Utilisez nohuppour le détacher pour de vrai.
Izzy
Mon mauvais, je ne le savais pas, mais quand j'ai testé sur mon Debian, la commande a continué à s'exécuter après la fermeture du shell qui l'a lancée: /
Flinth
1
Je ne sais pas exactement où le processus en arrière-plan est attaché et quand. Mais si vous vous connectez, par exemple, à une machine distante, il est définitivement arrêté dès que vous vous déconnectez (sauf s'il s'est démonifié ). Donc, pour être sûr à 100%, vous utilisez plutôt nohup- qui enregistre également toutes les sorties (désormais invisibles) dans un fichier appelé nohup.outsitué dans le répertoire à partir duquel vous avez démarré la commande.
Izzy
D'accord, merci pour vos explications ^^
Flinth
Cette réponse peut fonctionner correctement lorsqu'elle est combinée avec la jobscommande. Très souvent, je veux pouvoir revenir au processus shell après l'avoir mis en arrière-plan.
Réponses:
Pour éviter que les signaux de sortie ne se propagent aux processus enfants du terminal et du shell, exécutez la commande avec
nohup
, c'est-à-dire:la source
cmd & disown
fonctionne aussi, car le&
est traité comme un;
séparateur de commandes. La commande disown supprime la connexion entre la session shell bash et la commande en arrière-plan.cmd &|
.En utilisant
screen
:après cela, vous pouvez quitter le terminal, vous pouvez également le rattacher en:
Plus d'infos: référence
la source
Si vous souhaitez exécuter une commande ou un fichier spécifique toutes les secondes environ en arrière-plan après avoir quitté le terminal, vous pouvez essayer cette petite chose facile;
Cela exécuterait scipt.sh toutes les 5 secondes.
la source
Mettez un caractère "&" après votre commande.
par exemple:
la source
/home/your/script.sh
- car il n'a pas été détaché de son "parent", mais simplement "en arrière-plan". Utiliseznohup
pour le détacher pour de vrai.nohup
- qui enregistre également toutes les sorties (désormais invisibles) dans un fichier appelénohup.out
situé dans le répertoire à partir duquel vous avez démarré la commande.jobs
commande. Très souvent, je veux pouvoir revenir au processus shell après l'avoir mis en arrière-plan.