Maison >Tutoriel système >Linux >Explorer le monde mystérieux des opérations en arrière-plan sous Linux

Explorer le monde mystérieux des opérations en arrière-plan sous Linux

WBOY
WBOYavant
2024-02-12 14:06:221440parcourir

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…] [&] 探秘 Linux 中的神秘后台运行世界

$ 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 
探秘 Linux 中的神秘后台运行世界

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.

探秘 Linux 中的神秘后台运行世界
[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 commande

trap 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 :

探秘 Linux 中的神秘后台运行世界

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

. 探秘 Linux 中的神秘后台运行世界
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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer