1. Les concepts de groupe de processus, de travail et de session
1. Groupe de processus : c'est un ensemble d'un ou plusieurs processus. Typiquement, associés à un même travail, différents signaux provenant du même terminal peuvent être reçus. Chaque processus possède un ID de groupe de processus unique. Chaque groupe de processus peut avoir un processus leader. L'identité du processus chef de groupe est que son ID de groupe de processus est égal à son ID de processus. Le processus chef de groupe peut créer un groupe de processus, créer les processus dans le groupe, puis y mettre fin. Tant qu'il existe un processus dans un groupe de processus, le groupe de processus existe, que le processus chef de groupe se termine ou non.
2. Job : Shell est divisé en front et backend pour contrôler non pas le processus mais le travail (job) ou le groupe de processus. Une tâche de premier plan peut être composée de plusieurs processus, et une tâche d'arrière-plan peut également être composée de plusieurs processus. Le shell peut exécuter une tâche de premier plan et un nombre illimité de tâches en arrière-plan, appelées contrôle des tâches.
La différence entre un travail et un groupe de processus : Si un processus dans le travail crée un processus enfant, le processus enfant n'appartient pas au travail.
Une fois le travail terminé, le Shell se mettra au premier plan. Si le processus de premier plan d'origine existe toujours (si le processus enfant n'a pas été terminé), il deviendra automatiquement un groupe de processus en arrière-plan.
3. Session : Il s'agit d'un ensemble d'un ou plusieurs groupes de processus. Une session peut avoir un terminal de contrôle. Le processus initial de session qui établit une connexion avec le terminal de contrôle est appelé processus de contrôle. Plusieurs groupes de processus dans une session peuvent être divisés en un groupe de processus de premier plan et un ou plusieurs groupes de processus d'arrière-plan. Par conséquent, une session doit inclure le processus de contrôle (le premier processus de la session), un groupe de processus de premier plan et tout groupe de processus d'arrière-plan.
****************** (Le groupe de processus équivaut à une classe, et le chef de groupe est équivalent au chef d'équipe. La conversation équivaut à une note. Chaque note dispose d'un Bureau des Affaires Académiques (terminal de contrôle)).
2. Terminal
1. Le concept de terminal : Une fois que l'utilisateur s'est connecté au système via le terminal, il obtient un processus Shell. Ce terminal est appelé le terminal de contrôle du processus Shell
Chacun. le processus peut transmettre un fichier de périphérique spécial /dev/tty pour accéder à son terminal de contrôle. En fait, chaque périphérique terminal
correspond à un fichier de périphérique différent. /dev/tty fournit une interface universelle. Un processus peut accéder à son terminal de contrôle via /dev/tty ou via le fichier de périphérique correspondant. La fonction ttyname peut trouver le nom de fichier correspondant à partir du descripteur de fichier. Le descripteur de fichier doit pointer vers un périphérique terminal et non vers n'importe quel fichier.
******************Vérifiez les noms de fichiers de périphériques correspondant aux différents terminaux.
1 #include<stdio.h> 2 #include<unistd.h> 3 int main() 4 { 5 printf("fd: %d -> %s\n",0,ttyname(0)); 6 printf("fd: %d -> %s\n",1,ttyname(1)); 7 printf("fd: %d -> %s\n",2,ttyname(2)); 8 }
2. Processus de connexion au terminal :
Un PC n'a généralement qu'un seul ensemble de clavier et de moniteur, c'est-à-dire un seul ensemble d'équipements terminaux, mais il peut être activé par Ctrl-Alt-F1~ Ctrl-Alt-F6 Les terminaux à 6 caractères sont équivalents à 6 ensembles de terminaux virtuels. Ils partagent le même ensemble de terminaux physiques. Les fichiers de périphériques correspondants sont /dev/tty1~/dev/tty6, ils sont donc appelés terminaux virtuels. Le fichier de périphérique /dev/tty0 représente le terminal virtuel actuel. Par exemple, lors du passage au terminal caractère de Ctrl-Alt-F1, /dev/tty0 représente /dev/tty1 Lors du passage au terminal caractère de Ctrl-Alt-. F2, /dev/tty0 représente Représente /dev/tty2, qui est une interface universelle tout comme /dev/tty, mais elle ne peut pas représenter le terminal correspondant à la fenêtre du terminal graphique.
a. Lorsque le système démarre, le processus d'initialisation détermine quels terminaux doivent être ouverts en fonction du fichier de configuration /etc/inittab.
b. Getty ouvre le terminal comme terminal de contrôle en fonction des paramètres de ligne de commande, pointe les descripteurs de fichiers 0, 1 et 2 vers le terminal de contrôle
, puis invite l'utilisateur à saisir un compte. Une fois que l'utilisateur a accédé au compte, la tâche de getty est terminée et il exécute le programme de connexion :
execle("/bin/login", "login", "-p", username, NULL, envp);
c . Le programme de connexion invite l'utilisateur à saisir un mot de passe (désactive l'écho du terminal lors de la saisie du mot de passe), puis vérifie l'exactitude du mot de passe du compte. Si le mot de passe est incorrect, le processus de connexion est terminé et init relancera/exécutera un processus getty. Si le mot de passe est correct, le programme de connexion définit certaines variables d'environnement, définit le répertoire de travail actuel sur le répertoire personnel de l'utilisateur, puis exécute Shell:
execl("/bin/bash", "-bash", NULL);
Troisièmement, Processus démon
1 Le processus démon, également appelé processus démon, est un processus spécial exécuté en arrière-plan. Il est indépendant du terminal de contrôle et exécute périodiquement une tâche ou attend qu'un événement se produise.
2. Utilisez ps axj | grep -E 'd$' pour afficher le processus démon
Le paramètre a indique que non seulement les processus de l'utilisateur actuel sont répertoriés, mais également les processus de tous les autres utilisateurs, et le paramètre x indique que non seulement les processus du terminal de contrôle sont répertoriés. Processus répertorie également tous les processus sans terminaux de contrôle. Le paramètre j indique la liste des informations relatives au contrôle des tâches.
3. Créez un processus démon
Appelez la fonction setsid pour créer une nouvelle session et devenez le leader de la session (le premier processus de la session). Si l'appel réussit, l'identifiant de session nouvellement créé le sera. être renvoyé. Si une erreur se produit, -1 sera renvoyé ;
a. Appelez umask pour définir le mot du masque de création du mode fichier sur 0.
b. ). Raisons :
1) Si le démon est démarré en tant que simple commande shell, alors la fin du processus parent fait penser au shell que la commande a été exécutée.
2) Assurez-vous que le processus enfant n'est pas le processus leader d'un groupe de processus.
c. Appelez setsid pour créer une nouvelle session. setsid provoquera :
1) Le processus appelant devient le premier processus de la nouvelle session.
2) Le processus appelant devient le processus leader d'un groupe de processus.
3) Le processus appelant n'a pas de terminal de contrôle. (Fork à nouveau pour s'assurer que le processus démon n'ouvrira pas le périphérique tty par la suite)
d Remplacez le répertoire de travail actuel par le répertoire racine.
e. Fermez les descripteurs de fichiers qui ne sont plus nécessaires.
f.Autres : ignorez le signal SIGCHLD.
#include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 void mydeamon(void) 5 { 6 pid_t id=fork(); 7 umask(0);//将文件模式创建屏蔽字设置为0. 8 if(id>0) 9 { 10 exit(0);//调用fork,父进程退出(exit) 11 } 12 setsid();//调用setsid创建一个新会话 13 chdir("/");//将当前工作目录更改为根目录。 14 close(0);//关闭不在需要的文件描述符。 15 close(1); 16 close(2); 17 } 18 int main() 19 { 20 mydeamon(); 21 while(1); 22 return 0; 23 }
Utilisez ps axj | grep "nom de fichier" pour afficher le processus démon qui vient d'être créé
Ce qui précède est Linux - terminal, contrôle des tâches , et Le contenu du processus démon, veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !