Explorons un monde mystérieux dans le système d'exploitation Linux - en arrière-plan. Dans une utilisation quotidienne, nous devons souvent utiliser l'exécution en arrière-plan pour permettre aux tâches de s'exécuter silencieusement en arrière-plan sans affecter notre travail actuel. Alors, comment implémenter le fonctionnement en arrière-plan sous Linux ?
Penser
Tout d'abord, nous devons considérer une question : pourquoi le programme en arrière-plan se ferme-t-il lorsque vous fermez directement le terminal ? En effet, lorsque vous fermez directement le terminal, le terminal enverra un signal SIGHUP aux tâches en arrière-plan démarrées dans l'environnement actuel ? , provoquant le blocage du programme en cours. Ensuite, ignorez simplement le SIGHUP.
nonhup
La commande la plus couramment utilisée est [nohup]. D'après le nom, vous pouvez savoir si elle suspend l'exécution de la commande, ferme le terminal ou se déconnecte d'un compte. Le processus continuera à s'exécuter. le symbole.
Utilisation : commande nohup [Arg…] [&]
$ nohup sh test.sh & # 直接关闭当前终端,再打开一个查看 $ ps -few|grep test.sh
Comme le montre ce qui précède, le processus parent de test.sh que nous exécutons est devenu [PID 1] et est repris par le processus principal Linux.
setsid
nohup consiste à ignorer le signal SIGHUP, y a-t-il d'autres idées ?
La commande setip peut rouvrir la session, hériter de l'ID du groupe de processus parent et échapper au contrôle du processus parent. Comme vous pouvez le voir sur l'image ci-dessous, le processus parent du script test.sh est déjà init 1. À l'heure actuelle, indépendamment de la fermeture ou de la sortie du terminal, cela n'a rien à voir avec le programme en arrière-plan.
$ setsid sh test.sh
Une autre différence entre setsid et nohup est qu'il n'est pas nécessaire d'utiliser le symbole & d'arrière-plan.
sortie
Utilisez la commande exit pour quitter le terminal, mais notre programme continuera à s'exécuter. Pourquoi ?
En effet, lors de la sortie du terminal à l'aide de la commande exit, le signal SIGHUP ne sera pas envoyé à la tâche à laquelle appartient le terminal. Il est contrôlé par l'élément de configuration huponexit. La valeur par défaut est désactivée. voir le.
[root@api ~]# shopt |grep huponexit huponexit off
Configurez huponexit sur activé, utilisez à nouveau la commande exit pour quitter et les tâches correspondantes se termineront en conséquence.
[root@api ~]# shopt -s huponexit [root@api ~]# shopt |grep huponexit huponexit on
piège
La commandetrap est une commande intégrée à Linux. L'action à entreprendre lors de la réception du signal spécifié, suivie du nom du signal à traiter, est la suivante :
Lorsqu'un script doit être mis en arrière-plan et que nous ne voulons pas que le terminal quitte et ferme le programme, nous pouvons ajouter la commande trap au script pour ignorer le signal SIGHUP (suspendre le processus).
#!/bin/sh trap "" HUP while true;do date >> /root/test.txt sleep 1 done
La commande Linux screen est utilisée pour les programmes de gestion multi-fenêtres. Elle peut créer un terminal et laisser le programme s'y exécuter
.screen sh test.sh &
Comme le montre l'exemple, le processus parent du script de test est le processus du terminal d'écran, et le processus parent PID1 du terminal d'écran termine également l'exécution du processus en arrière-plan.
En bref, fonctionner en arrière-plan est une technique très courante et pratique sous Linux. Qu'il s'agisse d'effectuer certains services en arrière-plan côté serveur ou d'effectuer des tâches de longue durée sur un ordinateur personnel, les opérations en arrière-plan peuvent nous aider à améliorer notre efficacité et à faciliter notre travail quotidien.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!