Processus en cours d'exécution en arrière-plan après la fermeture du terminal
Je suis en train d'exécuter un script dans le fond, même après la fermeture du terminal. J'ai cherché et cherché et essayé nohup
et disown
, mais ils ne semblent être au travail. Quand je ferme une fenêtre de terminal, j'obtiens le typique Closing this window will terminate the running processes: watch.
message. Que se termine la résiliation de mon processus d'arrière-plan, même lorsque l'utilisation de nohup
ou disown
. Quel pourrait être le problème?
Mon code est un simple de deux lignes
cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null"
$cmd & # blocks automatically
Il est situé dans .bash_profile
, parce que je le veux démarrer à chaque fois que j'ouvre un nouveau terminal.
Vous pouvez ignorer le sudo; j'ai déjà trouvé une façon d'exécuter une commande sudo sans entrer le mot de passe.
Je suis à l'aide de Mac OSX.
- Tangentiellement pertinentes: mywiki.wooledge.org/BashFAQ/050
- Avoir un nouveau processus de démarrage chaque fois que vous lancez un nouveau shell sonne comme une idée terrible.
- Je sais que les problèmes de sécurité avec cette. Mais je préfère essayer de le faire fonctionner avant de m'en occuper. À ce point, je ne suis pas sûr si l'exécution d'un processus en arrière-plan fermé le terminal est encore possible.
- Le message d'avertissement semble venir de l'OSX Terminal d'application; il n'est certainement pas une caractéristique de Bash. Avez-vous vérifié si le processus est toujours en cours d'exécution en dépit de l'avertissement? Si non, savez-vous ce qu'il tue?
- Le processus (cmd j'ai défini) s'exécute après que le terminal démarre. Lorsque je tente de fermer le terminal, le processus est toujours en cours d'exécution. Seulement après que j'ai fermer la fenêtre de terminal est cmd arrêté. Je vais essayer d'examiner la OSX préférences terminal pour voir si ses responsables.
- Bon je me suis débarrassé de la mise en garde par le basculement de la OSX préférences terminal, mais le problème existe toujours (cmd encore se fait tuer).
- Vous voulez dire que vous avez changé la "Demander avant la fermeture de" la préférence? Que juste désactive la boîte de dialogue, évidemment.
Vous devez vous connecter pour publier un commentaire.
Partir d'un shell interne est exécuté et l'exécution de la
nohup
commande à partir de là, il semble éviter de devoir Terminal de le tuer lors de la sortie.Pas très élégant, mais fonctionne pour moi.
C'est déjà répondu, mais l'Écran de l'utilitaire me semble qu'il serait parfait pour cela.
man screen
Pour afficher la documentation de l'écran.www.ss64.com/osx/screen.html
de vue un peu plus convivial de la documentation.Écran de démarrage avec un nom et un script à exécuter:
Lorsqu'un écran de démarrage de la session, on a l'option de déconnexion d'elle. Cela permettra de sortir de l'écran actif en arrière-plan. Elle reste active même après que l'utilisateur se déconnecte (autorisations nonobstant).
Voici un exemple:
Ajouter la ligne suivante dans le fichier (que j'utilise textwrangler et /ou nano).
Ouvrir deux fenêtres du terminal.
screen -ls
. Vous devriez voir un message sur le pas de sockets être trouvé.screen -S ScreenCheck screencheck.sh 500
. screencheck.sh doit être exécutable.Dans la deuxième fenêtre de terminal, vous devriez voir:
ctrl-a d
. C'est ctrl + a, relâchez les deux, touche d.[detached]
.screen -ls
.Vous devriez voir quelque chose comme:
Rattacher à l'écran de session à l'aide de
screen -R ScreenCheck
.Vous devriez voir quelque chose comme:
Pour voir si elle est en cours d'exécution après déconnexion, journal et ssh à l'ordinateur à partir d'un autre ordinateur.
screen -ls
doivent montrer la même session écran comme avant.J'espère que cette aide.
tmux
.