Quelle est la vie d’une boucle infinie envoyer à l’arrière-plan?

Quand se terminera une boucle infinie?

Par exemple si je cours

while :; do sleep 1; date +%s; done & 

quand cela se terminera-t-il – à la fermeture du terminal ou à l’arrêt?

Lorsque vous fournissez & à la fin, cela passe en arrière-plan. Que cela soit tué ou non dépend de la façon dont vous fermez le terminal.

Si vous fermez l’application de terminal elle-même ( Ctrl + F4 , appuyez sur x dans la décoration de la fenêtre ou sur Maj + Ctrl + W pour gnome-terminal ), le processus d’arrière-plan est supprimé.

Toutefois, si vous fermez le terminal à l’aide de la touche exit ou de la combinaison de touches Ctrl + D , il continue de s’exécuter, même si vous vous déconnectez (sauf s’il s’agit d’une application à interface graphique). Cela se terminera lorsque vous arrêterez.

(Je ne sais pas pourquoi il y a une différence entre les deux. Je soupçonne que lorsque vous fermez l’application, le système d’exploitation la ferme ainsi que ses enfants.)

Ce qui suit est différent:

 nohup while :; do sleep 1; date +%s; done & 

La commande nohup le détache du terminal. Quelle que soit la fermeture du terminal, la commande continue de s’exécuter jusqu’à la fermeture (la déconnexion n’est pas suffisante) ou la suppression manuelle de la commande.

Lorsque vous utilisez nohup , la sortie passe à ~/nohup.out sauf si vous redirigez manuellement la sortie.

PS La commande ne fonctionnera pas avec nohup tel que donné, car nohup ne prend pas de commande composée. Mais vous pouvez le scripter et exécuter le script avec nohup .

PPS Il est plus facile de voir ce qui se passe en exécutant une interface graphique. Au lieu de la commande while …, je lance ceci:

 gcalctool & 

Il est beaucoup plus rapide et plus facile de voir ce qui se passe, car la calculasortingce disparaît quand elle est tuée. et vous pouvez le tuer facilement (fermez la calculasortingce).

Si vous fournissez & a la fin, la fermeture du terminal ne fermera pas le processus. Il peut quand même être tué par un signal TERM ou KILL. À l’arrêt, TERM et KILL sont envoyés à tous les processus.