Processus et GlibC
Les processus en C via la GlibC
Les processus
Un processus est une tâche en cours d’exécution sur son systÚme, elle comporte des données ainsi que du code. Un processus peut avoir plusieurs états et peut comuniquer avec d’autres processus. Wikipedia pour en savoir +
Notions importantes
- Entêtes unistd.h, stdlib.h
- Un processus est identifié via un identifiant unique on parle de PID Process IDentifier
- Tout processus a un pÚre, on parle de PPID Parent Process IDentifier. Seul le processus init est orphelin (cat /proc/1/status).
- ps
Cas concret
Un serveur et ses clients. A chaque nouvelle connexion d’un client sur le serveur, celui-ci déclenche un nouveau processus, ainsi chaque client dispose de ses propres propriétés et fonctionnalités.
Les routines
Un processus est déclenché via l’appel-systÚme fork(), il duplique le processus appellant et retourne l’identifiant du processus créée du cÎté appelant et 0 du cÎté fils.
En cas de problÚme fork() retourne la valeur -1 et remplit la variable globale errno.
-
pid_t fork ();
Via leurs identifiants, on pourra faire exécuter au processus un bout de code différent, exemple le processus parent écoute les nouvelles connexions clientes et génÚre les processus fils qui s’ocupperont du traitement client.
Pour ça on dipose des routines suivantes :
-
pid_t getpid (); /* retourne le PID du processus appelant */
-
pid_t getppid (); /* Retourne le PPID du processus appelant */
Un exemple
Source
-
#include <stdio.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
-
int
-
main (int argc, char *argv[])
-
{
-
pid_t pid;
-
-
pid = fork ();
-
if (pid == -1)
-
{
-
fprintf (stderr, “Erreur! : fork() - errno=%d\n“, errno);
-
return 1;
-
}
-
-
if (pid != 0) /* proc pÚre */
-
{
-
fprintf (stdout, “Proc PÚre :\n\tPPID=%d, PID=%d\n“,
-
getppid (), getpid ());
-
wait (NULL); /* attend que le proc fils termine */
-
-
return 0; /* termine la tâche */
-
}
-
else /* proc fils */
-
{
-
fprintf (stdout, “Proc Fils : \n\tPPID=%d, PID=%d\n“,
-
getppid (), getpid ());
-
}
-
return 0;
-
}
Résultat
-
sahid@master-deb:~/Desktop$ ./a.out
-
Proc Fils :
-
PPID=3261, PID=3262
-
Proc PÚre :
-
PPID=2818, PID=3261
-
sahid@master-deb:~/Desktop$ ps
-
PID TTY TIME CMD
-
2818 pts/0 00:00:00 bash
-
2843 pts/0 00:00:09 emacs
-
3263 pts/0 00:00:00 ps
-
sahid@master-deb:~/Desktop$




