Il existe 5 états : 1. État exécutable ; 2. État d'attente interruptionable ; 3. État d'attente ininterruptible ; 4. État arrêté ; La valeur d'état de « l'état exécutable » est TASK_RUNNING À ce stade, le programme a été placé dans la file d'attente d'exécution et est dans un état prêt à être exécuté. Une fois qu'il a obtenu le droit d'utiliser le processeur, il peut entrer en cours d'exécution. État.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Une instance de structure de données spéciale définie par le système d'exploitation et contrôlée par le système d'exploitation est appelée un processus. Il est connecté au code utilisateur, dispose d'un espace mémoire indépendant nécessaire à l'exécution du code et s'exécute selon le planning du planificateur en utilisant la tranche de temps processeur qui lui est attribuée.
5 états du processus Linux
Dans le système Linux, une fois qu'un processus est créé, il peut avoir les 5 états suivants dans le système. L'état actuel du processus est enregistré dans le membre d'état du bloc de contrôle de processus.
État prêt et état d'exécution (état exécutable)
La valeur de l'état du drapeau d'état de l'état prêt est TASK_RUNNING. À ce stade, le programme a été placé dans la file d’attente d’exécution et est prêt à être exécuté. Une fois le droit d’utiliser le processeur obtenu, il peut passer à l’état de fonctionnement.
Lorsque le processus obtient le processeur et s'exécute, la valeur de state est toujours TASK_RUNNING et ne change pas ; mais Linux pointera un pointeur actuel spécifiquement utilisé pour pointer vers la tâche en cours d'exécution pour indiquer qu'il s'agit d'un processus en cours d'exécution. .
État d'attente interrompu
La valeur de l'état du drapeau d'état est TASK_INTERRUPTIBL. A ce moment, le processus est en attente car il n’a pas obtenu les ressources demandées. Une fois que la ressource est disponible ou qu'il y a un signal de réveil, le processus mettra immédiatement fin à l'attente et entrera dans l'état prêt.
État d'attente ininterruptible
La valeur de l'état du drapeau d'état est TASK_UNINTERRUPTIBL. À l’heure actuelle, le processus attend également des ressources. Une fois la ressource disponible, le processus passe immédiatement à l’état prêt. La différence entre cet état d'attente et l'état d'attente interruptible est qu'un processus dans l'état TASK_UNINTERRUPTIBL ne peut pas être réveillé par un sémaphore ou une interruption, et ne peut être réveillé que lorsque les ressources qu'il demande sont valides.
Cet état est utilisé dans certains scénarios dans le noyau, par exemple lorsque le processus doit lire et écrire sur le disque et que les données sont copiées dans la mémoire du DMA si la veille du processus est interrompue à ce moment (. comme un signal de sortie forcée) ) Des problèmes sont alors susceptibles de survenir, le processus sera donc dans un état ininterrompu.
État d'arrêt
La valeur de l'état du drapeau d'état est TASK_STOPPED. Lorsque le processus reçoit un signal SIGSTOP, il passe de l'état d'exécution à l'état arrêté. Lorsqu'il reçoit un signal SIGCONT, il revient à l'état d'exécution. Cet état est principalement utilisé pour le débogage du programme et est également appelé « état de pause » ou « état de suspension ».
État d'abandon
La valeur de l'état du drapeau d'état est TASK_DEAD. Le processus s'arrête de fonctionner pour une raison quelconque, et toutes les ressources occupées par le processus seront recyclées, à l'exception de la structure task_struct (et quelques ressources), et le système n'y prêtera plus attention, donc cet état est également appelé un "état zombie" et le processus devient un processus Zombie.
Pendant tout le cycle de vie d'un processus, celui-ci peut passer entre 5 états. La relation de conversion entre les cinq états du processus Linux est illustrée dans la figure ci-dessous :
Recommandations associées : "Tutoriel vidéo Linux"
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!