Maison > Tutoriel système > Linux > le corps du texte

Comment terminer un processus sous Linux : Explication détaillée des terminaisons normales et anormales

王林
Libérer: 2024-07-18 22:11:07
original
586 Les gens l'ont consulté

Linux 下结束进程的方法:正常与异常终止详解

Dans les deux premiers chapitres, nous avons appris à créer des processus. Dans ce chapitre, nous apprendrons comment terminer le processus sous Linux.

Sous Linux, il existe 3 façons de terminer un processus normalement et 2 façons de le terminer anormalement :

1. Fin normale :

a. Retour d'appel dans la fonction principale. Cela équivaut à appeler exit.

b.Appelez la fonction de sortie. Selon la définition de cette fonction dans ANSIC, lorsqu'elle est appelée, tous les handles de sortie enregistrés seront exécutés, tous les flux d'E/S standard seront désactivés, ainsi que les descripteurs de fichiers et plusieurs processus (processus parents). ne sera pas traité. (avec les processus enfants), les tâches, etc., ce n'est donc pas adapté aux systèmes Linux.

c. Appelez la fonction _exit. Exit est appelé formation Linux par _exit et ferme certains handles de sortie spécifiques à Linux.

2. Résiliation anormale

linux保存退出命令行_linux退出保存文件_linux下退出不保存

a. Appelez l'abandon. Cela semble être un cas particulier du deuxième cas, puisqu'il forme un signal SIGABRT.

b. Le processus reçoit un signal spécifique. Ce signal peut être généré par le processus lui-même (comme la fonction abort), ou il peut provenir d'autres processus ou du noyau. Par exemple : lorsqu'un processus tente d'accéder à une adresse mémoire hors limites ou lorsque le diviseur est nul, le noyau génère un signal pour interrompre le processus.

Quelle que soit la méthode utilisée pour terminer le processus, le même morceau de code dans le noyau finira par être exécuté. Ce code ferme tous les descripteurs de fichiers ouverts par le processus, la mémoire vidéo occupée par les accès privés, etc.

Jetons un coup d'œil aux fonctions exit et _exit

Ces deux fonctions sont dans des fichiers d'en-tête différents : exit est dans stdlib.h, _exit est dans unistd.h

linux退出保存文件_linux下退出不保存_linux保存退出命令行

Leurs méthodes d'appel spécifiques sont les suivantes :

voidexit(int__status)

void_exit(int__status)

Le paramètre status est le statut de sortie.

Jetons un coup d'œil aux deux morceaux de code suivants :

linux保存退出命令行_linux下退出不保存_linux退出保存文件

Photo 1

linux下退出不保存_linux退出保存文件_linux保存退出命令行

Photo 2

linux退出保存文件_linux保存退出命令行_linux下退出不保存

linux保存退出命令行_linux下退出不保存_linux退出保存文件

Photo 3

linux保存退出命令行_linux退出保存文件_linux下退出不保存

Image 4

Le code de la figure 1 manque de n, ce qui fait que la phrase à la fin du test n'est pas copiée. En effet, si printf n'ajoute pas de n, les informations ne seront pas copiées immédiatement et _exit ne forcera pas la sortie du fichier. les données dans le tampon. c'est-à-dire que les données qui n'ont pas été écrites sur le périphérique et qui sont toujours dans le tampon provoquées par des appels tels que printf/fprintf seront supprimées lors de _exit, mais pas avec exit. . S'il y a n, copiez-le directement. Pour le moment, il n'y a aucune différence entre exit/_exit

.

L'ordre différent dans lequel les processus frère et sœur sont terminés produira des résultats différents

1. Le processus parent se termine avant le processus enfant :

Cette situation est ce que nous appelons un processus orphelin. Lorsque le processus parent se termine en premier, le système laisse le processus d'initialisation prendre le relais du processus enfant.

2. Le processus enfant se termine avant le processus parent, et le processus parent n'appelle pas la fonction d'attente

Dans ce cas, le sous-processus entre dans un état zombie et le restera jusqu'au redémarrage du système. Lorsque le processus enfant est dans un état zombie Sous Linux, il se termine sans enregistrer Le noyau enregistre uniquement certaines informations nécessaires du processus pour le processus parent. À ce stade, le processus enfant occupe toujours des ressources et réduit également le nombre maximum de processus pouvant être créés par le système.

Quels sont les états zombies ?

Un processus qui a été terminé il y a longtemps, mais dont le processus parent n'a pas encore traité les conséquences (obtenir des informations sur le processus enfant terminé et libérer les ressources qu'il occupe encore) est appelé un processus zombie (zombie).

3. Le processus enfant se termine avant le processus parentQuitte sans enregistrer sous Linux, mais le processus parent appelle la fonction d'attente

À ce stade, le processus parent attendra la fin du processus enfant.

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!

source:itcool.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!